Sql 参数数目错误(0表示1)

Sql 参数数目错误(0表示1),sql,ruby-on-rails,Sql,Ruby On Rails,在我的测验中,我创建了一个带有数字的问题表,用于判断问题是否得到回答。如果回答了,则应答表中的已访问列将变为1或0 作为 我在我的查看页面中查看了基于访问的问题,如下所示 <% @slno = 0 %> <ul class="student_list"> <% @questions.each do |s| %> <% @slno = @slno + 1 %> <% if ((Answer.find_by_sql

在我的测验中,我创建了一个带有数字的问题表,用于判断问题是否得到回答。如果回答了,则应答表中的已访问列将变为1或0 作为

我在我的查看页面中查看了基于访问的问题,如下所示

<% @slno = 0 %>
  <ul class="student_list">
    <% @questions.each do |s| %>
    <% @slno = @slno + 1 %>
      <% if ((Answer.find_by_sql["SELECT visited from answers where questions_id=#{s.id}"]) == 1) %>
        <li class="student_names">
          <a href="#" id="<%=s.id%>"  class="student-link" > <%= @slno %></a>
        </li>
        <% else %>
        <li class="student_names2">
          <a href="#" id="<%=s.id%>"  class="student-link2" > <%= @slno %></a>
        </li>
      <% end %>
    <% end %>
  </ul>


但是它给出的错误是:参数的数目错误(0代表1)

答案。sql错误!在[]或
()


您需要将find_by_sql封装在()中,如下所示:

Answer.find_by_sql(["SELECT visited from answers where questions_id=#{s.id}"])
在此实例中,您也不需要编写自己的SQL,只需执行以下操作:

<% if Answer.where(questions_id: s.id).count == 1 %>


您得到的错误是哪一行?请注意@Supremacy-answer。这表明了一个很好的改进——使用方法
where
而不是原始SQLi尝试了它,当我们使用它从0返回的索引时,它不起作用。可能的问题是列名不正确。你的变体应该是
Answer.where(questions\u id:s.id).count==1
(你有
questions\u id
而不是
question\u id
),或者更简单的
Answer.where(questions\u id:s.id).有没有?
附加说明:也许我没有注意到你的if条件。这让我很困惑,因为您从表中选择了列
已访问
,其中
问题=u id=:id
,并将结果与1进行比较。我不明白它是如何工作的,我也不确定它是否真的有效。在我的控制台中,我得到一个对象数组,如果我开始将它与1进行比较,我总是得到false。请检查/重新检查您的代码。
<ul class="student_list">
  <% @questions.each_with_index do |s, index| %>
    <% if ((Answer.find_by_sql(["SELECT visited from answers where questions_id=#{s.id}"])) == 1) %>
      <li class="student_names">
        <a href="#" id="<%=s.id%>"  class="student-link" > <%= index %></a>
      </li>
    <% else %>
      <li class="student_names2">
        <a href="#" id="<%=s.id%>"  class="student-link2" > <%= index %></a>
      </li>
    <% end %>
  <% end %>
</ul>
Answer.find_by_sql(["SELECT visited from answers where questions_id=#{s.id}"])
<% if Answer.where(questions_id: s.id).count == 1 %>