2012-05-12 28 views
0

我正在玩run_callbacks并出现问题。有人可以帮我吗?Rails 3 run_callbacks参数

## 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是与每个对象关联的属性,因此实例变量是最好的设备。