根据.order中的排名在Rails中分配操作

时间:2016-02-19 06:54:06

标签: ruby-on-rails

在我的记分板控制器中,我正在设置订单,我按照score对结果进行排名:

 @Quizzes = Quiz.where(finished: true, category: session[:category]).order(score: :desc).limit(10)

返回表格中前10个结果的表格。我现在想在第一个位置(排名靠前的)结果旁边添加一条消息,并为其余结果添加不同的消息。所以我尝试使用first!创建一个if / else:

  <% if Quiz.where(category: session[:category]).first! %>
     <td>You win</td>
  <% else %>
    <td>You lose</td>
  <% end %> 

这确实增加了#34;你赢了&#34;视图,但它是为最终结果(#10)做的,并且else消息根本没有出现。我也尝试将它切换到.last,但同样的事情发生了。

假设您可以使用.order作为选择结果的方式,我该如何调整?

更新

添加用于呈现分数表的完整代码:

  <% @quizzes do |quiz| %>
    <tr>
     <td></td>
     <td><%= quiz.user.username %></td>
     <td><%= quiz.user.city %></td>
     <td><%= quiz.category %></td>
     <td><%= quiz.score %></td>
     <% end %>

  <% @quizzes.each_with_index do |quiz, index| %>
    <% if index == 10 %>
        <td>You Win</td>
     <% else %>
        <td>You lose</td>
    <% end %>
    <% end %>
</tr>

3 个答案:

答案 0 :(得分:3)

这是你应该做的:

<% @quizzes.each_with_index do |quiz, index| %>
    <tr>
     <td></td>
     <td><%= quiz.user.username %></td>
     <td><%= quiz.user.city %></td>
     <td><%= quiz.category %></td>
     <td><%= quiz.score %></td>
     <% if index == 0 %>
        <td>You Win</td>
     <% else %>
        <td>You lose</td>
     <% end %>
    </tr>
<% end %>

答案 1 :(得分:0)

尝试这样的事情:

<% @Quiz.each do |quiz| %>
  <% if quiz == @Quiz.first %>
    <td>You win</td>
  <% else %>
    <td>You win</td>
  <% end %>
<% end %>

as .first返回集合的第一个对象,而不是对象是否是第一个对象。话虽这么说你也可以这样做:

<% @Quiz.each_with_index do |quiz, index| %>

然后检查index == 0是否确定它是否是第一个对象。

答案 2 :(得分:0)

假设您在@top_ten = Quiz.where(finished: true, category: session[:category]).order(score: :desc).limit(10)

中有十个分数

您可以执行以下操作:

<% @top_ten.each_with_index do |quiz, index| %>
    <% if index == 0 %>
        <td>You Win</td>
    <% else %>
        <td>You lose</td>
    <% end %>
<% end %>