2013-11-11 3 views
0

В моей викторине я создал таблицу вопросов с номерами, которые используются для ответа на вопрос или нет. если он ответил посещаемый столбец в ответ таблице идет к 1 или еще 0 внеправильное количество аргументов (0 для 1)

+----+--------+--------------+---------+---------------+------------+-------+---------+ 
| id | answer | questions_id | user_id | exam_group_id | modules_id | marks | visited | 
+----+--------+--------------+---------+---------------+------------+-------+---------+ 
| 1 | ans2 |   8 |  3 |    1 |   1 |  0 |  1 | 
| 2 | NULL |   9 |  3 |    1 |   1 |  0 |  0 | 
| 3 | NULL |   6 |  3 |    1 |   1 |  0 |  0 | 
| 4 | ans1 |   5 |  3 |    1 |   2 |  1 |  1 | 
| 5 | NULL |   4 |  3 |    1 |   2 |  0 |  0 | 
| 6 | NULL |   3 |  3 |    1 |   2 |  0 |  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)

+0

В какой строке вы получаете сообщение об ошибке? – dax

ответ

1

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> 

И вам не нужно использовать @slno - использовать each_with_index

переработан код:

<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> 
+0

Спасибо, что так много работает –

+0

Пожалуйста, обратите внимание на ответ @Supremacy. Это говорит о хорошем улучшении - использовать метод 'where' вместо raw SQL – gotva

+0

Я попробовал, что он не работает, когда мы используем индекс, который он возвращает с 0 right –

1

Вам нужно обернуть find_by_sql в() как так:

Answer.find_by_sql(["SELECT visited from answers where questions_id=#{s.id}"]) 

Вам также не нужно писать лет ur собственный SQL в этом случае, вместо этого вы можете просто сделать это:

<% if Answer.where(questions_id: s.id).count == 1 %> 
Смежные вопросы