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

Hi guys,

I implemented self-referential system based on Josh S.'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:

<% @animals.each do |animal_hash| %> <% end %>
Animal Captured
<%= h animal_hash[:animal].name %> <%= animal_hash[:capture_rate].to_s