0

我正在玩 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

有更好的主意吗?

4

1 回答 1

0

使用实例变量:)

在模块中使用实例变量的唯一严重问题是模块中使用的变量名称会与类本身或其他包含模块中的名称发生冲突的风险。如果您使用一个足够晦涩的名称,例如@_xxx_loveble_lover,那应该可以有效地将风险降到最低。

从您的代码看来,这lover是与每个对象关联的属性,因此实例变量是最好的设备。

于 2012-05-13T08:19:01.727 回答