我正在尝试为我的网站实现嵌套对象表单,使用Ryan Daigle的博客文章作为指南(http://ryandaigle.com/articles/2009/2/1/what-s-new-in-edge-rails-nested-attributes)。由于某种原因,嵌套的表单字段不会出现在视图中。
class Instruction < ActiveRecord::Base
has_many :steps
accepts_nested_attributes_for :steps
end
class Step < ActiveRecord::Base
belongs_to :instruction
end
<% form_for @instruction do |instruction_form| %>
<%= instruction_form.error_messages %>
<p>
<%= instruction_form.label :title %><br />
<%= instruction_form.text_field :title %>
</p>
<p>
<%= instruction_form.label :difficulty %><br />
<%= instruction_form.text_field :difficulty %>
</p>
<% instruction_form.fields_for :steps do |step_form| %>
<%= step_form.label :explanation, 'Explanation: ' %>
<%= step_form.text_field :explanation %>
<% end %>
<p><%= instruction_form.submit "Submit" %></p>
<% end %>
当我将instruction_form.fields_for :steps do |step_form|
更改为instruction_form.fields_for :step do |step_form|
时,表单会呈现,但在提交后,我会收到“未知属性:步骤”错误。
我正在做的似乎与教程相符。我该怎么检查?感谢。
答案 0 :(得分:2)
你的控制器发生了什么?我还没有看过这个教程,现在似乎无法将其拉出来(向下?)但你是否在内存中构建一个对象来填写?
在您的控制器中,在“新”操作中,确保您
@instruction = Instruction.new
@instruction.steps.build
这将在内存中实例化Step
作为表单填写的“占位符”。 。 。至少这是我在使用accepts_nested_attributes_for
时在我自己的控制器中所做的事情,并且效果很好。
让我知道它是否有效,一旦我能够完成教程,我可能需要编辑这个