Вложенная форма has_many модель.Как получить идентификатор из вложенного элемента? - PullRequest
0 голосов
/ 05 октября 2010

У меня есть вложенная форма, структурированная: Question has_many Ответы.Итак, вопросы с несколькими вариантами ответов.

Текущее представление формы:

- semantic_form_for @question do |f|
  = f.error_messages
  - f.inputs do
    = f.input :question
    = f.semantic_fields_for :answers do |builder|
      = builder.input :content, :label => "Answer", :input_html => { :class => {'required', ' ckeditor'}}
    = f.buttons

Мой контроллер вопросов выглядит так:

  def new
    @question = Question.new
    4.times { @question.answers.build }
  end

  def create
    @question = Question.new(params[:question])
    @question.user_id = current_user.id
    if @question.save
      flash[:notice] = "Question added."
      redirect_to questions_url
    else
      render :action => 'new'
    end
  end

Все довольно просто.Однако теперь я хотел бы «выбрать» правильный ответ, желательно на той же странице, при добавлении.Я думаю, что я добавлю новую колонку к Вопросам, содержащим CorrectAnswerId некоторого вида.Но как я могу добавить его в view & controller?

1 Ответ

1 голос
/ 06 октября 2010

Я предполагаю, что вы используете какой-то метод флажка для указания "Это правильный ответ".

В этом случае вы можете просто установить флажок, содержащий идентификатор ответа, а затем на create вы можете установить в столбце correct_answer_id значение идентификатора этого флажка.

Однако, поскольку ваши ответы еще не сохранены (сборка создает только объекты в памяти), у вас не будет идентификаторов, пока ответы не будут сохранены. Самое простое решение - просто пометить ответ как правильный в таблице ответов, а не в таблице вопросов. Затем вы можете создать метод в модели Question, например:

def correct_answer
    @correct ||= answers.where(:is_correct => true)
end

Это также даст вам возможность учесть несколько правильных ответов, если вам это нужно. Если в этом нет необходимости, вы всегда можете просто добавить .first в конец строки запроса, чтобы вы возвращали один ответ, а не массив правильных ответов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...