这是一个相当绊脚石.警告:以下不是问题,而是对我提出的问题的解释.我的问题是 - 你有更好的方法吗?是否有一些我不熟悉的常用技巧?似乎这是一个微不足道的问题.
所以你有任务模型.您可以创建任务,完成任务,销毁它们.然后你有重复的任务.它就像常规任务一样,但它附有一个重复规则.但是,任务可以无限期地重现 - 您可以在计划中提前一年,并且您应该看到任务显示.
因此,当用户创建一个定期任务时,您不希望在未来一百年内构建数千个任务,并将它们保存到数据库中,对吗?所以我开始思考 - 你是如何创造它们的?
一种方法是在查看日程安排时创建它们.因此,当用户提前一个月移动时,将创建任何重复任务.当然,这意味着您不能再简单地处理任务的数据库记录.您执行的任务上的每个SELECT操作都必须位于特定日期范围的上下文中,以便触发该日期范围内的重复任务.这是一种维护和性能负担,但可行.
好吧,但原来的任务怎么样?每个周期性任务都与创建它的重复规则相关联,并且每个重复规则都需要知道开始重复的原始任务.后者很重要,因为当用户浏览他们的日程安排时,您需要将原始任务克隆到新日期.我猜也是可行的.
但如果原始任务更新会发生什么?这意味着现在,当我们浏览计划时,我们将创建从修改的任务克隆的重复任务.那是不可取的.所有隐式持久的重复任务都应该显示添加重复时原始任务的样子.因此,我们需要单独存储原始任务的副本,并从中进行克隆,以便重现工作.
但是,当用户在计划中导航任务时,我们如何知道在特定点是否需要创建新的重复任务?我们问复发规则:"嘿,我今天应该继续执行任务吗?" 它说是或否.如果今天已经有这个重复的任务,我们不会创建一个.一切都很好,除了用户还应该能够简单地删除一个自动持久的重复任务.在这种情况下遵循我们的逻辑,系统将重新创建已删除的任务.不好.因此,这意味着我们需要继续存储任务,但将此标记为已删除的任务以进行此重复.咩.
正如我在开始时所说,我想知道其他人是否解决了这个问题并且可以在这里提供建筑建议.它必须是这个混乱吗?还有什么比我更缺的优雅吗?
更新:由于这个问题难以完美回答,我将批准对设计/架构最有帮助的见解,这对于此类问题具有最佳的帮助/权衡比率.它不必包含所有细节.
如果我正确理解 Go 实践,调用者(又名消费者)应该从其依赖项(又名生产者)定义他们想要使用的接口。
\n但是,如果生产者有一个接受自定义类型的函数,那么最好让它接受一个接口,对吗?这样消费者就可以传递一些符合生产者接口的值,而无需知道确切的类型。因为生产者函数的输入值使生产者成为该输入值的“消费者”。
\n好吧,很公平。
\n问题是,消费者如何定义一个接口,其中包含一个函数,其参数是生产者中定义的接口?
\n假设我有一个名为chef
struct 的包Chef
。它有一个方法Cut(fruit) error
,并且fruit
是我的包中定义的接口chef
。
现在假设我在调用代码中,并且导入了 package chef
。我想给它一个水果来切,但就我而言,我实现了一个名为 的特定水果Apple
。当然,我会尝试为自己构建这个界面:
type myRequirements interface {\n Cut(Apple) error\n}\n
Run Code Online (Sandbox Code Playgroud)\nfruit
因为我有接口的具体实现称为Apple
,所以我想表明我的接口仅适用于苹果。
但是,如果我尝试Chef{}
针对我的接口使用,Go 将抛出编译错误,因为我的接口想要Cut(Apple)
并且Chef{}
想要Cut(Fruit)
。尽管苹果实现了这一点fruit
。
看来,避免这种情况的唯一方法是创建chef.Fruit
一个公共接口,并在我自己的接口中使用它。
type myRequirements interface {\n Cut(chef.Fruit) error\n}\n
Run Code Online (Sandbox Code Playgroud)\n但这完全破坏了我chef
在接口下插入不同实现(而不是 )的能力,因为现在我与chef
.
所以Chef有一个内部接口 …
假设你有这个结构:
class House < ActiveRecord::Base
has_many :rooms
accepts_nested_attributes_for :rooms
attr_accessible :rooms_attributes
end
class Room < ActiveRecord::Base
has_one :tv
accepts_nested_attributes_for :tv
attr_accessible :tv_attributes
end
class Tv
belongs_to :user
attr_accessible :manufacturer
validates_presence_of :user
end
Run Code Online (Sandbox Code Playgroud)
请注意,Tv的用户无法故意访问.所以你有一个三层嵌套的表格,允许你在一个页面上输入房子,房间和电视.
这是控制器的创建方法:
def create
@house = House.new(params[:house])
if @house.save
# ... standard stuff
else
# ... standard stuff
end
end
Run Code Online (Sandbox Code Playgroud)
问题:你将如何填充user_id
每个电视(它应该来自current_user.id)?什么是好的做法?
这是我在这看到的catch22.
user_ids
直接填充params
哈希(它们非常嵌套)
user_ids
不可批量分配user_id
必须存在有任何体面的方式吗?
我使用以下代码:
location / {
satisfy any;
allow 127.0.0.1;
deny all;
auth_basic "closed site";
auth_basic_user_file conf/htpasswd;
}
Run Code Online (Sandbox Code Playgroud)
但当我这样做curl -I "http://mysite.com"
时返回401 :(
我如何允许localhost?
编辑:
我使用的机器是亚马逊ec2实例.
好,
当你打电话给mysite.com时,我没有意识到amazon ec2实例会调用它的外部/公共IP :)
真傻.
所以我接受@Capilé对他提到的hosts文件解决方法的回答.
给定一个构建和执行某些命令的shell脚本(带有条件,连接和插值)(在我的情况下调用ImageMagick的convert
cli),有没有办法列出在该脚本中执行的命令?由于脚本convert
多次调用args,我想获得如下列表.
convert ...
convert ...
convert ...
...
Run Code Online (Sandbox Code Playgroud)
我在OS X中使用zsh,但可以切换到bash等.
ruby ×2
architecture ×1
bash ×1
go ×1
go-interface ×1
nested-forms ×1
nginx ×1
scripting ×1
shell ×1
zsh ×1