【问题标题】:Get Changes to ActiveRecord association获取 ActiveRecord 关联的更改
【发布时间】:2014-11-25 21:04:31
【问题描述】:

我有这样的事情:

class Post < ActiveRecord::Base
  has_many :tag_members
  has_many :tags, through: :tag_member
end

class Tag < ActiveRecord::Base
  has_many :tag_members
  has_many :posts, through: :tag_member
end

class TagMember < ActiveRecord::Base
  belongs_to :tag
  belongs_to :image
end

我想跟踪对 post 对象的编辑。最简单的方法似乎是这样的:

class Post < ActiveRecord::Base
  before_update :save_edits
  def save_edits
     # Assuming save_edit takes in a hash and persists it somehow
     save_edit(self.changes)
  end
end

但是,根据我所做的测试,在 Post 上的 has_many association 中添加新的 Tag 不会运行 before_update 回调,并且不会在 .changes 返回的哈希中存储任何内容。

跟踪这些类型的编辑的最佳方法是什么?我应该简单地重载.tags= 方法来进行自己的存储,还是有更好的方法?

【问题讨论】:

    标签: ruby-on-rails ruby rails-activerecord


    【解决方案1】:

    你可以这样做:

    class TagMember < ActiveRecord::Base
      after_save { |t| t.post.save }
      # ^^^^
    
      belongs_to :tag
      belongs_to :image
      belongs_to :post
      # ^^^^
    end
    

    【讨论】:

    • 虽然这确实更新了 updated_at 字段,但它不会在 Post 模型上运行 before_update 回调,也不会修改正在修改的 post 实例上的 .changes 方法.
    • @SH.TheSuper 现在呢?
    猜你喜欢
    • 2012-10-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-06
    • 1970-01-01
    相关资源
    最近更新 更多