Rails 5,简单字段用于嵌套资源的Cocoon gem

问题描述:

我想了解如何使用命名空间路由。Rails 5,简单字段用于嵌套资源的Cocoon gem

我有一个名为Proposal的模型,另一个名为Innovation。该协会是:

建议

has_many :innovations 
    accepts_nested_attributes_for :innovations, reject_if: :all_blank, allow_destroy: true 

创新

belongs_to :proposal 

在我的routes.rb,我有:

resources :proposals do 
    resources :innovations 

在我的建议控制器,我有:

def new 
    @proposal = Proposal.new 
    @proposal.innovations.build 

    # authorize @proposal 
    end 

    def edit 
    @proposal.innovations_build unless @proposal.innovations 

    end 

在我的建议表格中,我试图嵌套创新模型的表单字段。

<%= f.simple_fields_for [@proposal, @innovation] do |f| %> 
     <%= f.error_notification %> 
      <%= render 'innovations/innovation_fields', f: f %> 

     <% end %> 

     <%= link_to_add_association 'Add another novel aspect', f, :innovations, partial: 'innovations/innovation_fields' %> 
     </div> 

当我尝试,我得到一个错误,指出:

undefined method `model_name' for nil:NilClass 

我得到同样的错误,当我尝试:

<%= f.simple_fields_for [@proposal, @innovations] do |f| %> 

任何人都可以看到什么,我需要做的为了让提案形式包含创新形式领域?

您正在使用嵌套属性,因此在此特定情况下不需要嵌套路由。你可以只写

<%= f.simple_fields_for @proposal do |f| %> 

这将发布形式,包含所有的创新,给ProposalsController