Rails 3 vestal_versions:在子模型中更改时在父模型上创建新版本

时间:2013-09-16 07:05:42

标签: ruby-on-rails ruby model associations vestal-versions

将Rails 3与vestal_versions gem一起使用并具有以下情况:

class Post < ActiveRecord::Base
  versioned
  has_many :comments
  (...)
end

class Comment < ActiveRecord::Base
  belongs_to :post
  (...)
end

Post模型的版本控制完美无瑕。我想要的是,一旦相关的评论模型被创建/更新,相关的Post模型应该得到一个新版本。 (我不需要vestal_versions的恢复功能。)

实现这一目标的正确策略是什么?

1 个答案:

答案 0 :(得分:1)

我使用papertrail gem来执行此类任务,但这对您来说应该是一样的。 一个想法是更新评论的帖子,当评论将被创建 - 保存将在其帖子上调用,并将创建此帖子的新版本。像这样:

class Comment < ActiveRecord::Base
  belongs_to :post
  after_create :update_post

  def update_post
    self.post.save
  end
end

再次,可能不是最佳方式,因为每次添加评论时都必须在帖子上调用save,这是一个性能问题。

更新基于kwirschau评论

  def update_post
    self.post.send(:create_version)
  end