Justin
Justin

Reputation: 1956

How to Average Multiple Columns in Rails

I have the following objects: Products, Ratings, and Users. I am trying to filter and select a number of Products that the User owns (through a has_many :through relationship with UserProducts) and average a certain column the Ratings table that matches their User ID and the correct Product ID.

So, my function is something along these lines:

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

I think that I'm going about this the wrong way, because I'm trying to find a product_id by passing an entire array of data consisting of multiple products. But, I think of using a more traditional loop and that seems convoluted. Can someone point me in the right direction for solving this problem? Thanks!

Upvotes: 1

Views: 701

Answers (1)

joseph
joseph

Reputation: 780

If product is a single entry, as it appears to be in your code, I would do this:

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

If it's an array of products, this method may help you: http://apidock.com/rails/ActiveRecord/Batches/ClassMethods/find_each

Upvotes: 1

Related Questions