我正在使用 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
在我将它包含到一个对象中之后,我想提供两个类级别的方法(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)
它是零。
首先,我是否以有意义的方式组织代码,其次,为什么类属性为零?