我正在尝试在表格
的模型中进行一些计算我的表格似乎是
s.no name place overallrating reviews attrib_r1 attrib_r2 attrib_r3
1 raj usa 2 39 45 46
2 ravi india 4 56 75 85
现在我想通过我的模型更新我的整体专栏。
我试过像
def update_satisfaction
update_attributes(:satisfaction => self.collect(':attrib_r1','attrib_r2','attrib_r3').sum.to_f/self.reviews)
end
但是我收到一个错误,收集是未定义的,当我检查self.review我没有得到任何价值我没有。
我不知道我做对还是错。我正在学习rails现在可以告诉我怎么做。
谢谢
答案 0 :(得分:1)
假设此方法被定义为模型中的实例方法,self
将成为该模型的实例。据我所知,ActiveRecord对象没有.collect
方法,所以它的定义并不奇怪。
要获取几个属性的总和,您可以简单地将它们一起添加:
(self.attrib_r1 + self.attrib_r2 + self.attrib_r3).to_f/self.reviews
实际上,在实例方法中,引用属性时隐含self
,因此可以省略:
(attrib_r1 + attrib_r2 + attrib_r3).to_f/reviews
您也可以将属性放在一个数组中并对其求和,尽管效率可能略低:
[attrib_r1, attrib_r2, attrib_r3].sum.to_f/reviews
现在,如果这些值中的任何一个是nil
,这将产生错误(可能是TypeError: nil can't be coerced into Fixnum
),因此您需要在进行计算之前检查它。