Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/62.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 根据排列顺序在Rails中分配操作_Ruby On Rails - Fatal编程技术网

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