我正在尝试使用rails 4 app中的嵌套资源构建表单。我正在使用茧宝石。每个步骤都有子步骤,我希望允许用户在表单中添加任意数量的子步骤,并且他/她希望。
Step.rb
class Step < ActiveRecord::Base
has_many :substeps
accepts_nested_attributes_for :substeps
Substep.rb
class Substep < ActiveRecord::Base
belongs_to :step
表单代码
<%= form_for :step, :url => steps_path do |f| %>
<%= text_field(:step, :title, :value => '', class: 'fly-input input_info', placeholder: 'Process Title', id: 'step_form_title') %>
<%= text_field(:step, :description, :value => '', class: 'fly-input input_info', placeholder: 'Process Description', id: 'step_form_description') %>
<%= hidden_field :step, :known %>
<%= hidden_field_tag :experiment, @experiment.id %>
<%= f.fields_for :substep do |ff| %>
<%= ff.text_field :description %>
<% end %>
<%= link_to_add_association 'Add substep', f, :substeps %>
<%= f.submit "Done", class: "main_button" %>
<% end %>
当我这样做时,我得到一个错误: &#34;未定义的方法`reflect_on_association&#39;对于NilClass:Class&#34;在这一行
<%= link_to_add_association 'Add substep', f, :substeps %>
对我的问题有什么看法?
修改 根据Pavan的建议将text_field更改为ff.text_field
答案 0 :(得分:5)
Cocoon希望你提供一个表单对象作为第二个参数,但是也希望第二个参数实际上将Rails模型实例作为属性f.object
。
您的表单只是使用型号名称form_for :step
创建,因此Cocoon会引发异常。
要解决此问题,您应将其更改为form_for @step
,其中@step
可以是Step.new
或任何其他Step
实例。