2014-11-05 3 views
0

фона: Альянс имеет много игроков, которые имеют много городов. Каждый город относится к Океан.Процент Расчет - Рубин на Rails

Моя проблема:

Я пытаюсь вычислить процент городов в определенном океане. Например .:

<% @alliance.players.each do |p| %> 
    <% p.towns.each do |t| %> 
    <%= t.ocean %> 
    <% end %> 
<% end %> 

Это дает мне все Town's Ocean's данного альянса. Вывод будет выглядеть следующим образом:

54 54 54 54 54 35 54 54 54 54 54 54 54 54 45 45 45 45 45 45 54 54 54 44 54 54 54 54 54 54 54 54 54 54 54 54 54 54 54 54 54 54 54 54 54 54 54 54 54 54 54 54 54 54 54 54 54 54 54 54 54 54 54 54 54 54 54 54 54 54 54 54 54 54 54 54 54 54 54 54 54 54 54 54 54 54 54 54 54 54 54 54 54 54 54 54 44 54 44 54 54 54 54 54 54 54 54 54 54 54 54 54 54 54 54 54 

Таким образом, мы имеем большинство голосов: 54 и Мало: 44.

Как я могу рассчитать результаты, поэтому я получаю Процент городов в определенном океане, поэтому я получаю выход, например: Ocean 54: 83%, Ocean 44: 17%.

+1

Вы не должны делать этот расчет в View .. сделать это внутри контроллера, а затем использовать переменную внутри вида. У меня нет данных, поэтому я не могу попробовать, но вы можете делать все на уровне БД с помощью методов ActiveRecord. –

+1

Или напишите помощника. Или даже лучше, переместите эту логику в модель. – BroiSatse

ответ

3

Как насчет:

percentages = p.towns.group_by(&:ocean).map {|ocean, towns| [ocean, (towns.count/p.towns.count.to_f * 100).round(0)]}.to_h 
perentages.each {|ocean, percentage| puts "Ocean #{ocean}: #{percentage}%"} 
+0

Не могли бы вы присоединиться ко мне в чате? http://chat.stackoverflow.com/rooms/64334/percentage-calculation –