我不明白为什么要打印哈希值

时间:2020-02-06 08:52:49

标签: ruby-on-rails ruby

我现在正在尝试学习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}

我只是不明白为什么。我有一种感觉,我在复制哈希时在控制器中做错了,但我不知道该如何解决。 有人可以解释我在做什么错吗?

3 个答案:

答案 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| %>

仅执行,并且不打印哈希。