我试图存储FIFA游戏,并设置一个排名系统的记分牌。
我不应该在视图中使用逻辑,但是如果我在控制器中计算它们,它会呈现一个错误,即未指定方法用户。但是,当我将它放入循环中时,它会识别它,因为用户是循环项目。
该应用已经可以保存游戏并计算获胜者。该应用为每个游戏添加winner_id
和loser_id
。稍后在记分板中,我会计算循环中当前user_id
的所有游戏数与所有游戏相匹配的数量' winner_id
和loser_id
&#39}。这使数据库保持清洁。我不想在数据库中保留输赢,因为当游戏被删除时,它不应该算作输赢了。
控制器:
class ScoreboardController < ApplicationController
def index
@users = User.all
end
end
查看:
<div class="panel panel-default" style="margin-left: 10px; margin-right:10px">
<!-- Default panel contents -->
<div class="panel-heading">Scoreboard</div>
<!-- Table -->
<table class="table">
<thead>
<th>#</th>
<th>Username</th>
<th>Ratio</th>
<th>Wins</th>
<th>Losses</th>
</thead>
<% @users.each do |user|%>
<tbody>
<td>
1
</td>
<td>
<%= user.username %>
</td>
<% if (Game.where(:winner_id => user.id).count) == 0 %>
<td>Unvalid</td>
<% elsif (Game.where(:loser_id => user.id).count) == 0 %>
<td>Unvalid</td>
<% else %>
<% @ratio = (number_with_precision((((Game.where(:winner_id => user.id).count).to_f) / (Game.where(:loser_id => user.id).count).to_f), precision: 2)) %>
<td><%= @ratio %></td>
<% end %>
<td>
<%= Game.where(:winner_id => user.id).count %>
</td>
<td>
<%= Game.where(:loser_id => user.id).count %>
</td>
<% end %>
</tbody>
</table>
</div>
我想按正确的顺序列出此列表。该列表应按比例排序。 =&GT;视图中的@ratio。我可以直接这样做吗?
在第一个td
中,显示当前位置。它为每个用户显示1
。如何制作1
,2
,3
,...?
答案 0 :(得分:4)
您应该在User
模型中添加这些方法。
class User < ActiveRecord::Base
has_many :wins, class_name: 'Game', foreign_key: 'winner_id'
has_many :losses, class_name: 'Game', foreign_key: 'loser_id'
def ratio
wins.count / losses.count.to_f * 100
end
end
然后在控制器中:
def index
@users = User.all.sort_by(&:ratio)
end
并在视图中直接使用用户实例方法:
<%= user.wins.count %>
答案 1 :(得分:1)
你应该像@ThomasHaratyk上面提到的那样做。
其他问题:在第一个td显示当前位置,现在它为每个用户显示1,我该如何制作这个1,2,3 ......?
<% @users.each_with_index do |user, index|%>
<tbody>
<td>
<%= index + 1 %>
</td>
<% end %>