如何在两个不相关的模型上实现last_modified_by(person)属性--Rails

时间:2012-05-26 06:54:44

标签: ruby-on-rails model associations

我有Record模型,为了编辑此模型,您必须以Admin的实例登录。我希望有一个名为last_modified_by的列,指向最后修改记录的管理员。在数据库中,我认为在records表中添加一个包含Admin id的列会很好;但是,我知道如何做到这一点的唯一方法就是建立关联。这两个模型没有相互关联,因此关联没有多大意义。有没有其他办法可以在不诉诸协会的情况下完成这项任务?任何建议将不胜感激!

2 个答案:

答案 0 :(得分:2)

嗯,我认为这个协会是一个很好的工具。你可能想尝试以某种方式破解它,但我认为你能想到的任何东西都不会像通过foreign_key那样好(也是如此之快)。但也许您想要为您的关联命名,并执行以下操作:

class Record < ActiveRecord::Base
  belongs_to :culprit, :class_name => 'Admin', :foreign_key => 'last_modified_by'
end

或者给它一些更有意义的命名?

答案 1 :(得分:1)

您可以创建一个活动记录before_save回调。回调会将管理员的id保存到last_modified_column中。这将确保每次模型发生更改时都会保存/更新管理员ID。

例如,假设admin是@admin:

class Record < ActiveRecord::Base
  before_save :save_last_modified

  def save_last_modified
    self.last_modified_column = @admin.id
  end

至于获取@admin,您可以使用method similar to this,并在Record模型的某处设置@admin = Admin.current(如链接中的User.current)。