如何在Rails中平均多列

时间:2012-02-15 23:04:41

标签: ruby-on-rails ruby ruby-on-rails-3

我有以下对象:产品,评分和用户。我正在尝试过滤并选择用户拥有的许多产品(通过与UserProducts的has_many :through关系),并在其中列出与其用户ID和正确的产品ID匹配的评级表。

所以,我的功能就是这样:

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 个答案:

答案 0 :(得分:1)

如果product是单个条目,因为它似乎在您的代码中,我会这样做:

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

如果是一系列产品,此方法可能会对您有所帮助:http://apidock.com/rails/ActiveRecord/Batches/ClassMethods/find_each