为什么我在提交错误表单时丢失了由简单表单创建的单选按钮?

时间:2012-10-28 14:53:22

标签: ruby-on-rails ruby-on-rails-3 simple-form

我有一个这样的表格:

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

2 个答案:

答案 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',现在可以正常使用