我有一个Parent
模型,根据其子项的所有标记的聚合维护一组Tags
:
model Parent
before_save :agregate_tags
has_many :children
has_many :tags
def agregate_tags
self.tags = self.children.flat_map(&:tags).uniq
end
end
儿童模特:
class Child
belongs_to :parent, autosave: true
has_many :tags
end
当我保存Child
时,父节点未保存。为什么会这样?
当我在此处保存child
时没有错误,并且没有与Parent
相关的数据库活动。似乎没有尝试保存它。
如果我在Child上创建before_save
回调并在其中保存parent
,则会成功保存而不会出错。
答案 0 :(得分:2)
你如何保存child
?如果您没有创建或修改与父级的关联,则rails不会修改父级记录。你是否真的希望每次修改孩子时不必要地更换parent
?
你需要使用before_save
来做你想做的事(如你所说)。