rails如何调用表中的属性并执行一些计算更新另一列

时间:2014-01-16 01:41:31

标签: ruby-on-rails ruby-on-rails-4

我正在尝试在表格

的模型中进行一些计算

我的表格似乎是

   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现在可以告诉我怎么做。

谢谢

1 个答案:

答案 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),因此您需要在进行计算之前检查它。