使用 cocoon gem 添加嵌套表单。除非先创建厕所,否则设施不会保存
Using cocoon gem to add nested forms. Facilities will not save unless a Toilet is created first
我将按照茧中的教程开始 gem。尝试创建厕所时,除非先创建厕所,否则我添加的设施不会保存。我在想它应该按原样一起创建。有没有办法在建造厕所时节省设施?
不要混淆事情
class Toilet < ApplicationRecord
has_many :facilities
accepts_nested_attributes_for :facilities, reject_if: :all_blank, allow_destroy: true
end
class Facility < ApplicationRecord
belongs_to :toilet
end
马桶控制器
def new
@toilet = Toilet.new
end
def create
@toilet = Toilet.new(toilet_params)
if @toilet.save
redirect_to @toilet
else
render :new
end
end
private
def toilet_params
params.require(:toilet).permit(:name, :location, facilities_attributes: [:id, :name, :_destroy])
end
_form.html.erb
<%= f.simple_fields_for :facilities do |facility| %>
<%= render 'facility_fields', :f => facility %>
<% end %>
<div class='links'>
<%= link_to_add_association 'add facility', f, :facilities %>
</div>
<%= f.submit 'Save' %>
<% end %>
_facility_fields.html.erb
<div class='nested-fields'>
<%= f.inputs do %>
<%= f.input :name %>
<%= link_to_remove_association "remove facility", f %>
<% end %>
</div>
Wesley,是的 - 您应该能够同时保存父项和嵌套项。长版本:是的,你可以创建一个新记录,在保存之前,动态添加一些嵌套内容&第一次为其中任何一个,同时保存它们。
我认为您的问题可能出在 _facility_fields.html.erb
...您的 <% f.inputs do %>
看起来不合适或者只是设置错误。因为你已经有一个 do 循环包装你的 render
命令,你不应该需要这个其他 do
循环。这也意味着您想从 /div
.
正上方的模板中删除 end
东西
_facility_fields.html.erb
<div class='nested-fields'>
<%= f.inputs do %> // Issue is this line
<%= f.input :name %>
<%= link_to_remove_association "remove facility", f %>
<% end %> // Remove this too afterwards
</div>
我将按照茧中的教程开始 gem。尝试创建厕所时,除非先创建厕所,否则我添加的设施不会保存。我在想它应该按原样一起创建。有没有办法在建造厕所时节省设施?
不要混淆事情
class Toilet < ApplicationRecord
has_many :facilities
accepts_nested_attributes_for :facilities, reject_if: :all_blank, allow_destroy: true
end
class Facility < ApplicationRecord
belongs_to :toilet
end
马桶控制器
def new
@toilet = Toilet.new
end
def create
@toilet = Toilet.new(toilet_params)
if @toilet.save
redirect_to @toilet
else
render :new
end
end
private
def toilet_params
params.require(:toilet).permit(:name, :location, facilities_attributes: [:id, :name, :_destroy])
end
_form.html.erb
<%= f.simple_fields_for :facilities do |facility| %>
<%= render 'facility_fields', :f => facility %>
<% end %>
<div class='links'>
<%= link_to_add_association 'add facility', f, :facilities %>
</div>
<%= f.submit 'Save' %>
<% end %>
_facility_fields.html.erb
<div class='nested-fields'>
<%= f.inputs do %>
<%= f.input :name %>
<%= link_to_remove_association "remove facility", f %>
<% end %>
</div>
Wesley,是的 - 您应该能够同时保存父项和嵌套项。长版本:是的,你可以创建一个新记录,在保存之前,动态添加一些嵌套内容&第一次为其中任何一个,同时保存它们。
我认为您的问题可能出在 _facility_fields.html.erb
...您的 <% f.inputs do %>
看起来不合适或者只是设置错误。因为你已经有一个 do 循环包装你的 render
命令,你不应该需要这个其他 do
循环。这也意味着您想从 /div
.
end
东西
_facility_fields.html.erb
<div class='nested-fields'>
<%= f.inputs do %> // Issue is this line
<%= f.input :name %>
<%= link_to_remove_association "remove facility", f %>
<% end %> // Remove this too afterwards
</div>