Rails 茧嵌套形式:NilClass:Class 的未定义方法“reflect_on_association”

Rails cocoon nested form: undefined method `reflect_on_association' for NilClass:Class

我正在尝试在我的 rails 4 应用程序中构建一个包含嵌套资源的表单。我用的是茧gem。每个步骤都有子步骤,我希望允许用户向表单添加任意数量的子步骤,he/she 愿意。

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 %>

当我这样做时,我收到一条错误消息: "undefined method `reflect_on_association' for NilClass:Class" 在这一行

<%= link_to_add_association 'Add substep', f, :substeps %>

对我的问题有什么想法吗?

编辑 根据 Pavan 的建议将 text_field 更改为 ff.text_field

Cocoon 期望您提供一个表单对象作为第二个参数,正如您所做的那样,但也期望第二个参数实际上具有 Rails 模型实例作为属性 f.object.

您的表单仅使用模型名称创建,因此 form_for :step 因此 Cocoon 引发异常。

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