我正在使用new answer
展示模板呈现questions
表单,如下所示:
= render 'answers/form'
answers/form
如下:
= form_for Answer.new do |f|
.field
= hidden_field(:answer, :question_id, value: params["id"])
.field
%br/
= f.text_area :content, required: true, class: "form-control"
.actions
%div
= button_tag type: "submit", class: "button-hollow-b" do
%i.fa.fa-stethoscope
Post Help
我现在的问题是:
如果在保存答案时出现错误,可能是由于验证或其他原因,如何将此控制器create
方法重定向回问题显示页面,表单上仍填写了答案,错误这也阻止了保存,就像使用render
?
def create
@answer = Answer.new(answer_params)
respond_to do |format|
if @answer.save
format.html { redirect_to :back, notice: 'Answer was successfully created.' }
else
format.html { render :new }
format.json { render json: @answer.errors, status: :unprocessable_entity }
end
end
end
render :new
呈现新的答案模板,但不会提出问题' show
页面。
redirect_to :back
会清除我填写的答案,并且不会在表单上显示错误。
感谢。
答案 0 :(得分:0)
你要渲染questions/show
。您的问题实际上就在于如何创建答案。为此,您需要一个嵌套的表单。
从rails casts中遵循本指南: http://railscasts.com/episodes/196-nested-model-form-part-1?view=asciicast
如果该链接与您的计划不一致,那么您需要一个可以引用的实际对象。在这里,您使用Answer.new
,这意味着每次创建表单时都会创建一个新对象。您需要在控制器中使用@answer = @question.answers.build
,然后使用@answer
代替Answer.new
这样@answer.errors
就可以了。