私はUser、Account、Productsのモデルを持っているとします。私はこれらのすべてのモデルのために共通のafter_createコールバックがlog_creationと言うことを望んでいます。すべてのモデルで共通のafter_createコールバックを作成するには?
どうすればよいですか? ActiveRecord Callbacks上のRailsのガイド上のルビーから
私はUser、Account、Productsのモデルを持っているとします。私はこれらのすべてのモデルのために共通のafter_createコールバックがlog_creationと言うことを望んでいます。すべてのモデルで共通のafter_createコールバックを作成するには?
どうすればよいですか? ActiveRecord Callbacks上のRailsのガイド上のルビーから
あなたはどのモデルでこれをGenericModule
があり、含めることができるモデルで
class User < ActiveRecord::Base
include GenericModule
# ...other model code...
end
ますこの動作が必要なすべてのモデルでこれを使用できます。
:
Active Recordは、コールバックメソッドをカプセル化するクラスを作成することが可能となるので、それらを再利用することが非常に容易になります。ここで
たちはPictureFile
モデルのafter_destroyコールバックを持つクラスを作成する例を示します:クラス内で宣言すると
class PictureFileCallbacks
def after_destroy(picture_file)
if File.exists?(picture_file.filepath)
File.delete(picture_file.filepath)
end
end
end
、上記のように、コールバックメソッドは、パラメータとしてモデルオブジェクトを受け取ります。現在のモデルでは、コールバッククラスを使用することができます:あなたは
module GenericModule
extend ActiveSupport::Concern
included do
after_create :log_creation
end
def log_creation
# perform logging
end
end
を望むと
class PictureFile < ActiveRecord::Base
after_destroy PictureFileCallbacks.new
end
モジュールはlibにありますか? – PiKaY
@PiKaY https://stackoverflow.com/questions/4013486/ruby-on-rails-where-should-i-store-modules – Kavincat
@Kavincatありがとうございます。 – PiKaY