我现在正在尝试学习Rails。 我创建了这个网站,用户可以在其中创建4人游戏比赛并将其分配到联赛。 然后,我在表中显示分数。 我正在像这样使用哈希。 这是我的联赛索引控制方法:
def index
if signed_in?
@leagues = League.all
@users = User.all
@matches = Match.all
@league_scores=Hash.new(0)
@scores = Hash.new(0)
@leagues.each do |league|
@scores.clear
@matches.each do |match|
if match.league_id==league.id
@scores[match.player_1_id]+=match.player_1_score
@scores[match.player_2_id]+=match.player_2_score
@scores[match.player_3_id]+=match.player_3_score
@scores[match.player_4_id]+=match.player_4_score
end
end
@league_scores[league.id]=@scores.deep_dup.delete_if {|key, value| value == 0 }
end
else
restrict_access
end
end
这是html文件的一部分:
<div class="p-2">
<div class="row border bg-light">
<div class="col-sm-4">Gracz</div>
<div class="col-sm">Suma wyników</div>
</div>
<%= @league_scores[league.id].each_key do |key| %>
<div class="row">
<div class="col-sm-4 border bg-light"><%= User.find(key).email%>/div>
<div class="col-sm"><%= @league_scores[league.id][key] %></div>
</div>
<%end%>
</div>
我遇到的问题是,在打印结果后,它还会将整个散列放在末尾,如下所示: The result
{1 => 5,2 => 305,3 => 405,4 => 105,5 => 200}
我只是不明白为什么。我有一种感觉,我在复制哈希时在控制器中做错了,但我不知道该如何解决。 有人可以解释我在做什么错吗?
答案 0 :(得分:4)
这是因为您输入了=
:
<%= @league_scores[league.id].each_key do |key| %>
它将导致此调用的返回值放入输出html中。您应该改用这个:
<% @league_scores[league.id].each_key do |key| %>
答案 1 :(得分:0)
使用<%=
时,表示您要显示结果。
在您的情况下,您显示each_key
循环的结果,该循环返回您看到的哈希。
在此过程中,您还按预期方式输出了表格,因此也看到了表格。
因此,您要做的只是使用<%
而不是<%=
。这样,您就可以输出在代码中呈现的所有内容,但不会呈现代码的实际结果值。
答案 2 :(得分:0)
考虑这两种语法。 code
是一些红宝石代码
<%= code %>
:打印执行code
后返回的对象。
<% code %>
:仅在这种情况下执行code
。
如果您要从中删除=
,
<%= @league_scores[league.id].each_key do |key| %>
,
仅执行,并且不打印哈希。