モデルがあります。Record
このモデルを編集するには、 のインスタンスとしてログインする必要がありますAdmin
。last_modified_by
レコードを最後に変更した管理者を指す列が必要です。データベースでは、管理者の;records
を保持する列をテーブルに追加するとよいと考えていました。id
ただし、それを行う方法を私が知っている唯一の方法は、関連付けを使用することです。これらの 2 つのモデルは互いに関連付けられていないため、関連付けにはあまり意味がありません。関連付けに頼らずにこのタスクを達成できる方法は他にありますか? どんなアドバイスでも大歓迎です!
2 に答える
うーん、ここではアソシエーションが良いツールだと思います。何らかの方法でハッキングを試みたいと思うかもしれませんが、foreign_key を介したアソシエーションほど優れたものはないと思います (これも非常に高速です)。しかし、関連付けに名前を付けて、次のようなことをしたいと思うかもしれません:
class Record < ActiveRecord::Base
belongs_to :culprit, :class_name => 'Admin', :foreign_key => 'last_modified_by'
end
または、より意味のある名前を付けますか?
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.