list animals with average capture_percent (Josh Susser's example)

Hi guys,

I implemented self-referential system based on Josh Susser's guidance on http://blog.hasmanythrough.com/2007/10/ … ny-through

now I'm unsuccesfully trying to list all animals together with average hunt.capture_percent, regardless of whether it is 'pursuit' or 'escape' (i am using it on sthg else than animals where it makes sense not to differentiate between these. i want to keep having separated 'pursuit' and 'escape' for future though)

i tried sthg like

<%= (animal.pursuit.average(:capture_percent) +animal.pursuit.average(:capture_percent))/2 %>

first, this doesn't work, while having just <%= (animal.pursuit.average(:capture_percent) %> does

second, i believe this calculation should rather be included in controller, but i have no idea how to do it over an array, join this array with the array of @animals and send this all to view :frowning:

this might be rather stupid newbie question, but I failed to google out an answer :frowning: thanks for any trace of help

"This doesn't work" won't get much help. In what way does it fail?

As for the second part, I'd suggest using map/collect from Enumerable to marry these in the controller if you want to move the calculation there. The approach really depends on what you need/want to do in the view. You might want to return the animal object, just it's name, etc. but it'd look something like this:

@animals = Animal.whatever_you_do_to_find_animals.collect{|animal| {:animal=>animal, :capture_rate=>animal.pursuit.average(:capture_percent)}}

Then in your view: <table>   <thead>   <th><td>Animal</td><td>Captured</td></th>   </thead>   <tbody>   <% @animals.each do |animal_hash| %>     <tr><td><%= h animal_hash[:animal].name %></td><td><%= animal_hash[:capture_rate].to_s</td></tr>   <% end %>   </tbody> </table>