redirect_to:back,同时仍保持表单字段的输入

时间:2015-06-14 13:47:19

标签: ruby-on-rails forms

我正在使用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会清除我填写的答案,并且不会在表单上显示错误。

感谢。

1 个答案:

答案 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就可以了。