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

Ruby on rails 为什么我在提交有错误的表单时丢失了由简单表单创建的单选按钮?,ruby-on-rails,ruby-on-rails-3,simple-form,Ruby On Rails,Ruby On Rails 3,Simple Form,我有一张这样的表格: 当我提交没有任何内容的表单时,它会显示错误: 单选按钮丢了 这在我的表单视图中: <%= simple_form_for @question, defaults: { error: false } do |q| %> <legend>Question</legend> <%= render "shared/error_messages", object: q.object %> <%= q.inp

我有一张这样的表格:

当我提交没有任何内容的表单时,它会显示错误:

单选按钮丢了

这在我的表单视图中:

<%= 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
对象上使用
build\u answer
方法(或其他方式)构建一个新的
answer
,可能是在
新的
方法中

发生的情况是,当
创建
操作失败时,
@问题
没有
答案
,并且
简单字段将不会显示任何内容

如果您需要更多详细信息,请发布控制器的代码,我们将尝试找出解决问题的方法

编辑:你构建问题的方式是错误的,应该是错误的

@question = Question.new(params[:question])

然后,您的
@问题将有一个答案,在您看来,一切都会正常工作;)

添加@question.answers.build在上次渲染“新建”的基础上,现在可以工作了

我得到了它。在rails文档中,“rails不会在控制器中运行该操作的任何代码”,因此我在上次渲染“new”的上方添加了@question.answers.build,现在它可以工作了。不,我构建问题的方式是正确的;),因为只有属性中的内容才可访问。无论如何,谢谢你的回答,我投了赞成票;)我真的不认为这是正确的,因为您的方式是添加大量代码,例如,您使用嵌套的属性所做的所有事情都可以通过我发布的解决方案自动完成,当然也可以通过在attr\u可访问列表中添加answer\u属性来完成。我看不出只保留attr_accessible list中的内容有什么好处是的,但是如果我进行批量赋值,它会有安全问题,因为有人可以更改答案或答案的正确属性类型布尔值。你认为有人可以如何更改这些内容?
@question = Question.new(params[:question])