У меня есть приложение для ставок, где пользователи могут делать ставки на спортивные матчи (например, баскетбол).У меня что-то вроде этого:
Group has_many :users
Group belongs_to :league
League has_many :matches
Match has_many :bets
User has many :bets
Bet belongs_to :group
Bet belongs_to :match
Bet belongs_to :user
Как видите, пользователи делают ставки в группах.Группа делает ставку на одну лигу (например, футбольный сезон 2011/2012), а лига состоит из множества матчей, на которые можно делать ставки.
Я хочу отобразить представление для действия в контроллере группы (поэтому группаэто базовая модель).Он должен отображать таблицу с совпадениями в заголовке горизонтальной таблицы и пользователями в заголовке вертикальной таблицы.В ячейке таблицы должна отображаться ставка пользователя на данный матч, например:
| Team 1 vs Team 2 | Team 3 vs Team 4
=======+==================+=================
User 1 | 1 : 2 | 0 : 0
-------+------------------+-----------------
User 2 | 2 : 0 | 1 : 0
Теперь возникает вопрос: как лучше настроить доступ к моим данным?
Я мог бы установить атрибут @group в контроллере, а затем получить доступ к данным в представлении следующим образом:
<table>
<thead>
<tr>
<th> </th>
<% for match in @group.league.matches %>
<th><%= "#{match.team1.name} vs. #{match.team2.name}" %></th>
<% end %>
</tr>
</thead>
<tbody>
<% for user in @group.users %>
<tr>
<th><%= user.name %></th>
<% for match in @group.league.matches %>
<td><%= ?????? %></td>
<% end %>
</tr>
<% end %>
</tbody>
</table>
Моя проблема обозначена как «??????»:Как получить доступ к правильной ставке?
match.bets.find_by_group_id_and_user_id( ... ) # this will generate a new SELECT on DB
match.bets.to_a.find{|bet| bet.user_id == user.id && bet.group_id == @group.id}.home_score # seems cluttered and should not belong in the view
Ваш вклад в это очень важен.Спасибо!