12

Rails に関しては、モデルのクラス メソッドとインスタンス メソッドをモジュールに含めることで提供できます。ただし、モデルに変数を含める方法について言及しているブログ エントリやスレッドは見つかりませんでした。

具体的には、インクルード モデルにクラス インスタンス変数を指定したい@questionのですが、モジュール内のどこに宣言を配置すればよいか分からないため、適用されます。モデル自体がその変数を宣言している場合は、クラスのインスタンス変数もオーバーライドしたいと思います。

ActiveSupport::Concernモジュールは実際に変数をまったく気にしますか?

module ContentAttribute
    extend ActiveSupport::Concern

    def foo
        p "hi"
    end

    module ClassMethods

        # @question = "I am a generic question." [doesn't work]

        def bar
            p "yo"
        end
    end
end 

class Video < ActiveRecord::Base
    include ContentAttribute

    # @question = "Specific question"; [should override the generic question]
end
4

1 に答える 1

19
module ContentAttribute
  extend ActiveSupport::Concern

  included do
    self.question = "I am a generic question."
  end

  module ClassMethods
    attr_accessor :question
  end

end

それでは、動画で…

class Video < ActiveRecord::Base
  include ContentAttribute
  self.question = "Specific question"
end
于 2015-03-12T22:04:28.930 に答える