Rails cocoon嵌套形式:undefined方法`reflect_on_association'对于NilClass:Class

时间:2016-01-18 15:20:54

标签: ruby-on-rails cocoon-gem

我正在尝试使用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

1 个答案:

答案 0 :(得分:5)

Cocoon希望你提供一个表单对象作为第二个参数,但是也希望第二个参数实际上将Rails模型实例作为属性f.object

您的表单只是使用型号名称form_for :step创建,因此Cocoon会引发异常。

要解决此问题,您应将其更改为form_for @step,其中@step可以是Step.new或任何其他Step实例。