更新Mongoid中相关has_and_belongs_to_many模型的updated_at

时间:2014-05-14 18:06:37

标签: ruby-on-rails mongoid

我有两个与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字段。但是它没有更新。有没有办法更新该字段?我要用触摸吗?

2 个答案:

答案 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