我有两个与has_and_belongs_to_many关系的模型。
class Person
include Mongoid::Document
include Mongoid::Timestamps
has_and_belongs_to_many :stories;
end
class Story
include Mongoid::Document
include Mongoid::Timestamps
has_and_belongs_to_many :people;
end
我正试图将故事推向一个人,
Person.stories << Story.first
我希望这会更新此人的updated_at字段。但是它没有更新。有没有办法更新该字段?我要用触摸吗?
答案 0 :(得分:2)
这在this GitHub issue中讨论过。添加新的相关对象时,不会更新基础对象。如果您使用的是belongs_to
,则可以添加touch: true
,但不是。{/ p>
在讨论该问题时,他们建议在相关对象中添加after_save
。在这种情况下,您必须将其添加到关系的两侧:
class Person
after_save do
stories.each(&:touch)
end
end
class Story
after_save do
people.each(&:touch)
end
end
不够优雅,但应该有效吗?
答案 1 :(得分:0)
作为评论中提及的ericpeters0n,接受的答案仅显示了在更新父母时如何触摸Child对象。
如果要在关联中添加/删除子项时触摸父对象,您只需执行以下操作:
class Person
after_save :touch
end
class Story
after_save :touch
end