2012-02-15 37 views
1

我包含以下对象:产品,评分和用户。我正在尝试筛选并选择多个用户拥有的产品(通过与UserProducts的关系has_many :through),并对与其用户标识和正确的产品标识匹配的评级表进行平均。如何平均Rails中的多列

所以,我的功能就是沿着这些路线的东西:

def find_rating(criteria) 
    product = self.products.find(:all, :conditions => ["criteria = ?", criteria]) 
    rating = self.ratings.where("product_id = ?", product).average(:overall) 
end 

我想我会对此错误的方式,因为我试图通过传递数据的整个数组找到PRODUCT_ID由多个产品组成。但是,我想到了使用更传统的循环,这似乎令人费解。有人能指出我解决这个问题的正确方向吗?谢谢!

回答

1

如果product是一个条目,因为它似乎是在你的代码,我这样做:

rating = self.products.find_by_criteria(criteria).ratings.average(:overall) 

如果它是琳琅满目的商品,这种方法可以帮助你:http://apidock.com/rails/ActiveRecord/Batches/ClassMethods/find_each

+0

对不起对于迟到的接受 - 他们有五分钟在这里等待,然后我有时候会忘记它,直到我下次登录。但是谢谢你!我正在使用find_each方法! – Justin 2012-02-16 23:01:45