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
实例。
我正在尝试在我的 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
实例。