Rails 5、Simple Fields For with Cocoon gem for nested resources
Rails 5, Simple Fields For with Cocoon gem for nested resources
我正在尝试学习如何使用命名空间路由。
我有一个模型叫做提案,另一个模型叫做创新。这些协会是:
提案
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| %>
这将 post 包含所有创新的表格 ProposalsController
。
我正在尝试学习如何使用命名空间路由。
我有一个模型叫做提案,另一个模型叫做创新。这些协会是:
提案
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| %>
这将 post 包含所有创新的表格 ProposalsController
。