Я не понимаю, почему печатается ха sh - PullRequest
1 голос
/ 06 февраля 2020

Я сейчас пытаюсь выучить ruby на рельсах. Я создал этот сайт, где пользователи могут создать матч для игры для 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>

У меня проблема в том, что после печати результаты также помещают весь ха sh в конец следующим образом: результат

{1 => 5, 2 => 305, 3 => 405, 4 => 105, 5 => 200}

И я просто не понимаю, почему. У меня ощущение, что я что-то не так делаю в контроллере, когда копирую ха sh, но я не знаю, как это исправить. Может кто-нибудь объяснить, что я делаю не так?

Ответы [ 3 ]

4 голосов
/ 06 февраля 2020

Это потому, что = вы ввели:

<%= @league_scores[league.id].each_key do |key| %>

Это вызывает возвращаемое значение этого вызова, помещенного в вывод html. Вы должны иметь это вместо:

<% @league_scores[league.id].each_key do |key| %>
0 голосов
/ 06 февраля 2020

Рассмотрим эти два синтаксиса. code - это некоторый ruby код

<%= code %>: объект, который возвращается после выполнения code, печатается.

<% code %>: code только выполняется в этом случае.

В вашем случае, если вы удаляете = из <%= @league_scores[league.id].each_key do |key| %>,

выполняется только выполнение, а га sh не печатается.

0 голосов
/ 06 февраля 2020

Когда вы используете <%=, это означает, что вы хотите отобразить результат.

В вашем случае вы отображаете результат each_key l oop, который возвращает га sh вы видите.

В процессе вы также выводите таблицу, как и ожидалось, и поэтому вы также видите ее.

Итак, вы хотите просто использовать <% вместо <%=. Таким образом, вы выводите все, что вы отображаете в своем коде, но вы не отображаете фактическое значение результата вашего кода.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...