0

モデルがあります。Recordこのモデルを編集するには、 のインスタンスとしてログインする必要がありますAdminlast_modified_byレコードを最後に変更した管理者を指す列が必要です。データベースでは、管理者の;recordsを保持する列をテーブルに追加するとよいと考えていました。idただし、それを行う方法を私が知っている唯一の方法は、関連付けを使用することです。これらの 2 つのモデルは互いに関連付けられていないため、関連付けにはあまり意味がありません。関連付けに頼らずにこのタスクを達成できる方法は他にありますか? どんなアドバイスでも大歓迎です!

4

2 に答える 2

2

うーん、ここではアソシエーションが良いツールだと思います。何らかの方法でハッキングを試みたいと思うかもしれませんが、foreign_key を介したアソシエーションほど優れたものはないと思います (これも非常に高速です)。しかし、関連付けに名前を付けて、次のようなことをしたいと思うかもしれません:

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

または、より意味のある名前を付けますか?

于 2012-05-26T07:02:45.130 に答える
1

You could create an Active Record before_save callback. The callback would save the admin's id into the last_modified_column. This would make sure the admin id is saved/updated each time there is a change to the model.

For example, assuming admin is @admin:

class Record < ActiveRecord::Base
  before_save :save_last_modified

  def save_last_modified
    self.last_modified_column = @admin.id
  end

As for getting @admin, you could employ a method similar to this, and set @admin = Admin.current (like User.current in the link) somewhere in the Record model.

于 2012-05-26T07:43:53.747 に答える