2012-05-13 4 views
1

Этот вопрос относится к приложению RoR quiz. Я хочу показать результаты викторины, показывая как правильный ответ, так и ответ пользователя.Ruby on Rails: передача переменной в активный запрос записи

Поэтому, на мой взгляд, мне нужно пройти каждый вопрос и показать ответ на вопрос, а также ответ пользователя. Тем не менее, я изо всех сил пытаюсь выяснить, как правильно запросить ответ пользователя.

Чтобы запросить user_answer, мне нужен response_set, где user_id = current_user.id, и мне нужно передать в question_id, когда он проходит через каждый цикл. Тем не менее, я зациклился на том, как это сделать.

Что мне нужно сделать, чтобы показать user_answer в представлении вместе с correct_answer?

У меня есть 3 модели:

Response_set 
belongs_to :user 
has_many :responses 

Reponse 
belongs_to :response_set 
belongs_to :question 

Question 
has_many :responses 

Таблица полей:

create_table :response_sets do |t| 
    t.integer :user_id 

create_table :responses do |t| 
    t.integer :response_set_id 
    t.integer :question_id 
    t.integer :user_answer 

create_table :questions do |t| 
    t.integer :correct_answer 

контроллера

@questions = Question.all 
@user = current_user.id 

View (просто пробегаем по вопросам и не показывая ответа пользователя)

<% @questions.each do |question| %> 
    <%= question.correct_answer %> 
<% end %> 
+0

Это действительно неоднозначная, если вы спросите меня – Jonathan

+0

Я думаю, что это может быть случай для названных областей, но, как Rails noob Я не могу предложить полное решение. –

+0

У вас есть метод current_user или что-то еще? Как вы знаете, для какого пользователя показывать ответ? – Mischa

ответ

1

Мой наставник в конечном итоге решить этот для меня. Вот решение, которое он представил:

«Я думаю, что лучший подход здесь был бы получить ответы от ответа набора и петли над что вместо зацикливания над вопросами.»

Контроллер:

@response_set = Response_set.where("user_id = ?", @user).includes({:responses => :question}).last 

Вид:

<% @response_set.responses.each do |response| %> 
    <%= response.question.correct_answer %> 
    <%= response.user_answer %> 
<% end %> 
0

Добавить user_id в таблице ответов, таким образом, вы не должны запрашивать response_set таблицу. После этого вы можете сделать что-то вроде этого внутри цикла

question.responses.where(:user_id => current_user.id).first.user_answer 
+0

Извините, что я не был чист, но, пытаясь упростить мой вопрос, я забыл, что есть также тестовая модель. Поскольку могут быть разные тесты, и пользователь может выполнять несколько тестов, необходимо сохранить user_id в response_set. Response_set принадлежит_to: test – diasks2

+0

В качестве ответа принадлежит_ответу__и_и_и_и_и_и_и__сегда принадлежит_пользователю_.Вы можете иметь user_id в обеих таблицах (response и response_set), в этом нет вреда. –

Смежные вопросы