2012-05-12 15 views
0

私はrun_callbacksで遊んでいて問題がありました。誰かが私を助けることができますか?Rails 3 run_callbacks with parameter

## loveable.rb 
module Loveable 
    extend ActiveSupport::Concern 

    included do 
    define_callbacks :love 
    end 

    def loved_by!(lover) 
    run_callbacks :love do 
     do_love(lover) 
    end 
    end 

    def do_love(lover) 
    ...implementation goes here... 
    end 
end 

## product.rb 
class Product < ActiveRecord::Base 
    include Loveable 

    set_callback :after, :love, :after_love 

    def after_love 
    ## How to get lover here?? 
    end 
end 

after_loveメソッドでは「恋人」ユーザーが必要です。どのように私はそれを達成できましたか?

今のところ私はインスタンス変数を使用していますが、解決策が嫌いです。

## loveable.rb 
def loved_by!(lover) 
    @lover = lover 
    run_callbacks... 
end 

## product.rb 
def after_love 
    @lover.do_something 
end 

もっと良いアイデアはありますか?

答えて

0

は、インスタンス変数を使用します:)

を使用すると、モジュール内のインスタンス変数を使用して持っている唯一の深刻な懸念は、モジュールで使用される変数名は、クラス自体内の名前やその他の含まれるモジュールと衝突するリスクです。十分にわかりにくい名前、たとえば@_xxx_loveble_loverを使用すると、リスクを効果的に最小限に抑える必要があります。

コードからは、loverが各オブジェクトに関連付けられた属性であるように見えるので、インスタンス変数がこれに最適なデバイスです。