Ruby on rails 根据排列顺序在Rails中分配操作
在我的记分板控制器中,我设置了一个顺序,并根据Ruby on rails 根据排列顺序在Rails中分配操作,ruby-on-rails,Ruby On Rails,在我的记分板控制器中,我设置了一个顺序,并根据得分对结果进行堆栈排序: @Quizzes = Quiz.where(finished: true, category: session[:category]).order(score: :desc).limit(10) 返回表中前10个结果的表。我现在想在第一名(排名靠前)的结果旁边放一条消息,其余结果则放一条不同的消息。所以我试着先用创建一个if/else: <% if Quiz.where(category: session[:c
得分对结果进行堆栈排序
:
@Quizzes = Quiz.where(finished: true, category: session[:category]).order(score: :desc).limit(10)
返回表中前10个结果的表。我现在想在第一名(排名靠前)的结果旁边放一条消息,其余结果则放一条不同的消息。所以我试着先用创建一个if/else代码>:
<% if Quiz.where(category: session[:category]).first! %>
<td>You win</td>
<% else %>
<td>You lose</td>
<% end %>
试着这样做:
<% @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就可以确定它是否是第一个对象 这是您应该做的:
<% @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 %>
你赢了
你输了
假设你在@top\u ten=quick.where(完成:true,类别:session[:category])中有十个分数。顺序(分数::desc)。限制(10)
您可以执行以下操作:
<% @top_ten.each_with_index do |quiz, index| %>
<% if index == 0 %>
<td>You Win</td>
<% else %>
<td>You lose</td>
<% end %>
<% end %>
你赢了
你输了
为什么不使用.each
对其进行迭代?我目前正在使用.each
对表中的结果进行迭代。所以现在,我会有一个表格,根据分数(你在控制器中看到的)显示结果1-10。对于排名靠前的行,我想在最后一列显示一条特殊消息。对于其他9个结果,我还想显示一条不同的消息。我相信。每个都不能让我这样定制。我弄错了吗?这在逻辑上是有道理的,但它再次将所有消息追加到最后一行(像以前一样),并实际将所有消息放在同一行中(因此赢家消息后面跟着9条输家消息)。如果index==10,将其更改为,则不会更改结果,因此我认为它现在不是在查询索引。听起来问题是html。你能在你的问题中发布吗?是的,这是因为你在这个循环中再次迭代所有的结果。您应该使用我给出的代码更改第一个循环。或者,如果您发布了用于呈现表的所有代码,那么我可以更正它以解决您的问题。@aliibrahim说得不错。刚刚更新了用于呈现该表的所有代码。@darkginger我刚刚更新了我的答案。请试试这个
<% @top_ten.each_with_index do |quiz, index| %>
<% if index == 0 %>
<td>You Win</td>
<% else %>
<td>You lose</td>
<% end %>
<% end %>