我现在一直在努力解决这个问题。检查是否添加,删除或更改了某些子对象的最佳方法是什么。
例如:
class Task < ActiveRecord::Base
after_save :setup_task
# =============== ASSOCIATIONS ===============
has_many :lists, :through => :map_list_tasks
def setup_task
if list_attributes_changed?
do something
end
end
end
我不知道该如何解决这个问题。我知道如何检查本地对象上的属性是否发生了变化。我怎么能对孩子们这样做呢?
由于
修改
对孩子使用回调的问题在于我正在运行的方法,提取数百万条记录,进行一些数学和比较,然后保存数百万条新记录。如果我在保存列表时触发它,它将运行4次而不是1次(或者有多少列表被添加到任务中)。由于运行大约需要25分钟,因此这并不理想。这将花费一个多小时,并将不必要的负载放在盒子上。另一个问题是该方法确实应该从“任务”运行,因为为每个添加的列表选择的选项决定了列表上会发生什么。例如,您可以添加4个列表,并将每个列表配置为25%。在这种情况下,它将平均分配所有4个资源。因此,如果我从列表中运行此命令,我仍然需要获取任务,然后是该任务的所有子项,然后比较保存的选项并运行方法
答案 0 :(得分:0)
如Surya所述,您最好使用list
模型
列表模型
您必须记住,nested objects
只是处理父模型中其他模型数据的一种方法。实际数据由相应的模型(在您的情况下为list
)
我会这样做:
#app/models/list.rb
Class List < ActiveRecord::Base
after_save :setup_task
def setup_task
do something
end
end
我不完全确定您的代码的上下文,但我猜测您不需要检查关联的集合是否已更新,因为after_save
会建议保存的内容?
如果您通过setup_task
让我知道您要实现的目标,我将能够为您的方法创建一些代码!