获得一场比赛的胜利者 - 铁路方式?

时间:2016-06-13 09:04:47

标签: ruby-on-rails postgresql ruby-on-rails-4 postgresql-9.5

在我的(联赛)视图中,我想列出所有比赛并将比赛标记为已经比赛,获胜球队或比赛为平局。

要知道这是一个平局还是获胜者,我必须检查每个对手的得分。我在哪里做这些计算? 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      |  
....

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;或其他内容)。