Sql 参数数目错误(0表示1)
在我的测验中,我创建了一个带有数字的问题表,用于判断问题是否得到回答。如果回答了,则应答表中的已访问列将变为1或0 作为 我在我的查看页面中查看了基于访问的问题,如下所示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
<% @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 %>