Help writing a simple algorithm

Hi, I really need some help implementing an algorithm into my app! I am trying to work out the popularity of books digg style which users can vote on. To do this I was think this algorithm might work for the time being : Popularity = [ (V1/A1) + (V2/A2) + … + (Vn/An) ] / Book entry Age Vn is a vote, and An is the age of that vote (for example, in minutes) and then finally divided by the total time the entry has been on the website. What I therefore need help with is the implementation. Firstly will the code belong in the model or should I create a library and call that? I need the code to loop through the books votes (self.votes) and substitute it in the algorithm. Here's where I got to:   def popularity     votes = Array.new     res = self.votes     res.each do |item|       vote = Hash.new

      vote[:date] = item.created_at

      votes << vote     end

    return votes   end I have no idea how I should move on from here? Any suggestions would really be appreciated! Thanks Ollie

Hi, I really need some help implementing an algorithm into my app! I am trying to work out the popularity of books digg style which users can vote on. To do this I was think this algorithm might work for the time being : Popularity = [ (V1/A1) + (V2/A2) + … + (Vn/An) ] / Book entry Age Vn is a vote, and An is the age of that vote (for example, in minutes) and then finally divided by the total time the entry has been on the website. What I therefore need help with is the implementation. Firstly will the code belong in the model or should I create a library and call that?

The code belongs in the Book model.

I need the code to loop through the books votes (self.votes) and substitute it in the algorithm. Here's where I got to: def popularity    votes = Array.new    res = self.votes    res.each do |item|      vote = Hash.new

     vote[:date] = item.created_at

     votes << vote    end

   return votes end I have no idea how I should move on from here? Any suggestions would really be appreciated!

I wouldn't do any looping in Ruby at all. It's going to get awful slow when the next Harry Potter book comes out and a million people vote for it...

def popularity    votes.sum('vote_column / db_function_to_convert_time_to_minutes(minutes_column)').to_f / (entered_at.to_i/60.0) end

That keeps it all in the database...

Haven't tested it, but something along those lines should work I would think.