我有一个嵌套的表单,结构化:问题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'的问题中添加一个新列。但是,我怎样才能在视图和视图中添加它。控制器?
答案 0 :(得分:1)
我假设您使用某种复选框方法来表示“这是正确答案”。
在这种情况下,您可以让复选框包含答案的ID,然后在create
上,您可以将correct_answer_id
列设置为该复选框的ID值。
但是,由于此时尚未保存您的答案(构建仅在内存中创建对象),因此在答案已保存之前您没有ID。最简单的解决方案是在答案表中将答案标记为正确,而不是在问题表中。然后,您可以在Question
模型中创建一个方法,如:
def correct_answer
@correct ||= answers.where(:is_correct => true)
end
如果需要,还可以让您能够获得多个正确的答案。
如果这不是必需的,您可以随时将.first
添加到查询字符串的末尾,以便返回一个答案而不是一组正确的答案。