在我的记分板控制器中,我正在设置订单,我按照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>
答案 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 %>