在我的(联赛)视图中,我想列出所有比赛并将比赛标记为已经比赛,获胜球队或比赛为平局。
要知道这是一个平局还是获胜者,我必须检查每个对手的得分。我在哪里做这些计算? view helper?,model scope?
我的想法是在列出比赛时有三个功能可以检查每场比赛:
match.played? - >真/假
match.tie? - >真/假
match.winner? - > team_id得分最高。
数据库(postgresql)
匹配
id | league_id | date
---+-----------+----------
1 | 1 | 2016-03-21 21:00:00
2 | 1 | 2016-03-22 09:00:00
...
对手 (如果没有播放,则分数为空)
id | match_id | team_id | score
---+----------+---------+--------
1 | 1 | 1 | 0
2 | 1 | 2 | 1
3 | 2 | 3 | 1
4 | 2 | 4 | 1
4 | 3 | 1 |
4 | 3 | 2 |
....
答案 0 :(得分:1)
你肯定是在正确的道路上。我会在Match
模型上建议您使用的方法,但有一个例外:
match.winner #=> returns the Team object of the winner (or nil).
然后我会有一个视图助手调用这些方法来确定如何渲染它们。即,它是否被播放过?这是领带吗?谁赢了。
答案 1 :(得分:0)
您的问题范围对于明确的答案来说有点宽泛;) 询问5位开发人员,您将得到12个不同的答案。
那就是说,我会这样做:
你实现这些实例方法的想法是一个很好的起点,虽然我个人不喜欢"?"不返回布尔值的方法,在我看来它应该只是#winner
并且应该返回团队实例,而不是id(我认为它是" Team"模型)。您可能想要考虑一种互补的#loser
方法。
您的观点可能如下所示:
<table>
<% @matches.each_with_index do |match, i| %>
<tr>
<td class="match number">
<%= i + 1 %>
</td>
<td class="team-1">
<%= match.team_1 %>
</td>
<td class="team-2">
<%= match.team_2 %>
</td>
<td class="winner">
<% if match.played? %>
<!-- this would be a view helper since you have to consider
the tie situation and we do not want that much logic
in the view. It would return a string with either the
teams name or "tie". -->
<%= winner_of_match match %>
<% else %>
N/A
<% end %>
</td>
<!-- etc... -->
</tr>
<% end %>
</table>
这是非常基础的,可以让你有一个构思的基础。例如,您可能想摆脱if match.played
并在视图助手中执行此操作(返回&#34;尚未播放&#34;或其他内容)。