我有一个这样的表格:
new question http://s7.postimage.org/djw3k1hsr/new_question.png
当我提交没有任何内容的表单时,它会显示错误:
error new question http://s18.postimage.org/gkaqgv3qh/error_new_question.png
单选按钮丢失了!
这是我的表单视图:
<%= simple_form_for @question, defaults: { error: false } do |q| %>
<legend>Question</legend>
<%= render "shared/error_messages", object: q.object %>
<%= q.input :content, input_html: { rows: 3, class: 'span6' } %>
<%= q.input :mark, input_html: { class: 'span1' } %>
<%= q.association :topic %>
<%= q.association :question_type %>
<%= q.simple_fields_for :answers do |a| %>
<%= a.input :correct, collection: [[true, 'True'], [false, 'False']],
as: :radio_buttons,
label: 'Answer',
value_method: :first,
label_method: :last,
item_wrapper_class: 'inline'
%>
<% end %>
<% end %>
我错过了什么或错了什么?当@ question.save为false时,我在问题控制器的创建操作中使用了render 'new'
。这是我的问题控制器:
class QuestionsController < ApplicationController
def new
@question = Question.new
@question.answers.build
end
def create
@question = Question.new(content: params[:question][:content])
@question.mark = params[:question][:mark]
@question.topic_id = params[:question][:topic_id]
@question.question_type_id = params[:question][:question_type_id]
@question.user_id = current_user.id
if @question.save
if params[:question][:answers_attributes]['0'][:correct] == 'true'
answer = @question.answers.build(content: 'True')
answer.correct = true
else
answer = @question.answers.build(content: 'False')
end
if @question.save
flash[:success] = "Successfully created new question."
redirect_to root_url
else
render 'new'
end
else
render 'new'
end
end
答案 0 :(得分:2)
我猜你是在控制器的answer
对象上使用build_answer
方法(或其他方式)构建新的@question
,可能在new
方法
当create
操作失败时,@question
没有answers
,而simple_fields_for
将不会显示任何内容。
如果您需要更多详细信息,请发布您的控制器代码,我们将尝试找出解决问题的方法。
编辑:您构建问题的方式是错误的,应该是
@question = Question.new(params[:question])
然后您的@question
会有一个答案,一切都会在您的视图中正常运行;)
答案 1 :(得分:0)
添加@ question.answers.build,最后渲染'new',现在可以正常使用