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 に答える