私は ActiveSupport::Concern を使用して、AR クラスに含まれているコードを削除しています。データのウィルソン下限を計算するためのモジュールがあります。
module CalculateWilsonBound
extend ActiveSupport::Concern
included do
class_attribute :wilson_ratings
class_attribute :wilson_positive_ratings
end
def calculate_wilson_lower_bound
number_of_ratings = self.class.wilson_ratings.call(self)
...
end
end
それをオブジェクトに含めた後、それぞれのカウントを返すブロックを定義する 2 つのクラス レベル メソッド (wilson_ratings、wilson_positive_ratings) を提供したいと考えています。
AR オブジェクトの観点から:
class Influence < ActiveRecord::Base
include CalculateWilsonBound
wilson_ratings { |model| model.votes }
wilson_positive_ratings { |model| model.positive_votes }
これにより実行時エラーが発生することはありませんが、クラス属性にアクセスする必要がある場合:
number_of_ratings = self.class.wilson_ratings.call(self)
ゼロです。
まず第一に、私は理にかなった方法でコードを整理していますか?第二に、なぜクラス属性が nil なのですか?