我有以下对象:产品,评分和用户。我正在尝试过滤并选择用户拥有的许多产品(通过与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。但是,我认为使用更传统的循环,这似乎是错综复杂的。有人能指出我正确的方向来解决这个问题吗?谢谢!
答案 0 :(得分:1)
如果product
是单个条目,因为它似乎在您的代码中,我会这样做:
rating = self.products.find_by_criteria(criteria).ratings.average(:overall)
如果是一系列产品,此方法可能会对您有所帮助:http://apidock.com/rails/ActiveRecord/Batches/ClassMethods/find_each