当我在控制台中运行此代码时,我有Foo::ActiveRecord_AssociationRelation
和我:
.inject(0){|sum,x| x.dimension == dimension && x.dimension_value == dimension_value && x.metric == metric ? (sum += x.metric_value) : ()}
我得到它应该返回的预期总和值。
然而,当我将此代码添加到模型
时def self.sum_by(dimension, dimension_value, metric)
...
end
我收到此错误:
NoMethodError: undefined method `inject' for #<Class:0x000000094cbbd0>
如何正确应用该代码?鉴于Foo
继承自ActiveRecord::Base
,我认为它应该有用。
答案 0 :(得分:3)
我假设您在将其复制到班级时删除了前导期。
但是,inject不是ActiveRecord :: Base对象的方法。它来自Enumerable模块,因此您需要在混有可枚举模块的内容上调用它。
例如,如果您尝试对Foo的每个实例求和,则可以先调用Foo.all,返回所有对象的数组。所以你的代码看起来如下。
def self.sum_by(dimension, dimension_value, metric)
Foo.all.inject(0){|sum, a_foo| foo.dimension == dimension && foo.dimension_value == dimension_value && foo.metric == metric ? (sum += foo.metric_value) : ()}
end