Cocoon gem - 嵌套表单保存元素,请求新模板文件并显示空字段
Cocoon gem - Nested form saves elements, asks for a new template file and shows empty fields
我知道这个问题已经被问过无数次了,但我没有找到任何人遇到我遇到的问题。
请务必注意,这是单个资源。
models/basic.rb
class Basic < ApplicationRecord
has_many :social_networks
accepts_nested_attributes_for :social_networks, reject_if: :all_blank, allow_destroy: true
mount_uploader :logo, LogoUploader
end
models/social_network.rb
class SocialNetwork < ApplicationRecord
belongs_to :basic
end
controllers/basic_controller.rb
def show
end
def new
@basic = Basic.new
@basic.social_networks.build
end
def edit
end
private
# Use callbacks to share common setup or constraints between actions.
def set_basic
@basic = Basic.first
end
# Never trust parameters from the scary internet, only allow the white
list through.
def basic_params
params.require(:basic).permit(:base_title, :resume, :logo, social_networks_attributes: [:id, :name, :url])
end
end
views/basics/_form.html.erb
<%= form_with(model: @basic, local: true, url: basics_path) do |f| %>
<div id="social_networks">
<%= f.fields_for :social_networks do |sn| %>
<%= render 'social_networks', f: sn %>
<% end %>
<div class="links">
<%= link_to_add_association 'Ajouter', f, :social_networks %>
</div>
</div>
<%= end %>
_social_network_fields.html.erb
<div class="nested-fields">
<div class="field">
<%= f.label :name %>
<%= f.text_field :name, placeholder: 'Nom' %>
</div>
<div class="field">
<%= f.label :url %>
<%= f.text_field :url, placeholder: 'Lien' %>
</div>
<div class="links">
<%= link_to_remove_association 'Supprimer', f %>
</div>
</div>
如问题标题所述,我的表单工作正常,并保存了我正确填写的元素。但是,当我想编辑时,我收到一条错误消息,指出找不到资源模板(它等待名为 _social_networks.html.erb
的文件)。当我添加它(并让它留空)时,我得到的表格就像我想创建一些新资源一样。
我做错了什么?
提前致谢
你写了
<%= render 'social_networks', f: sn %>
但是你的观点是_social_networks_fields.html.erb
你不能把 _social_networks_fields.html.erb 重命名为 _social_networks.html.erb 吗?
同时更改您的添加关联 link:
<div class="links">
<%= link_to_add_association 'Ajouter', f, :social_networks, :partial => 'social_networks' %>
</div>
或者直接使用
<%= render 'social_networks_fields', f: sn %>
而且你不需要 social_networks.html.erb
我知道这个问题已经被问过无数次了,但我没有找到任何人遇到我遇到的问题。
请务必注意,这是单个资源。
models/basic.rb
class Basic < ApplicationRecord
has_many :social_networks
accepts_nested_attributes_for :social_networks, reject_if: :all_blank, allow_destroy: true
mount_uploader :logo, LogoUploader
end
models/social_network.rb
class SocialNetwork < ApplicationRecord
belongs_to :basic
end
controllers/basic_controller.rb
def show
end
def new
@basic = Basic.new
@basic.social_networks.build
end
def edit
end
private
# Use callbacks to share common setup or constraints between actions.
def set_basic
@basic = Basic.first
end
# Never trust parameters from the scary internet, only allow the white
list through.
def basic_params
params.require(:basic).permit(:base_title, :resume, :logo, social_networks_attributes: [:id, :name, :url])
end
end
views/basics/_form.html.erb
<%= form_with(model: @basic, local: true, url: basics_path) do |f| %>
<div id="social_networks">
<%= f.fields_for :social_networks do |sn| %>
<%= render 'social_networks', f: sn %>
<% end %>
<div class="links">
<%= link_to_add_association 'Ajouter', f, :social_networks %>
</div>
</div>
<%= end %>
_social_network_fields.html.erb
<div class="nested-fields">
<div class="field">
<%= f.label :name %>
<%= f.text_field :name, placeholder: 'Nom' %>
</div>
<div class="field">
<%= f.label :url %>
<%= f.text_field :url, placeholder: 'Lien' %>
</div>
<div class="links">
<%= link_to_remove_association 'Supprimer', f %>
</div>
</div>
如问题标题所述,我的表单工作正常,并保存了我正确填写的元素。但是,当我想编辑时,我收到一条错误消息,指出找不到资源模板(它等待名为 _social_networks.html.erb
的文件)。当我添加它(并让它留空)时,我得到的表格就像我想创建一些新资源一样。
我做错了什么?
提前致谢
你写了
<%= render 'social_networks', f: sn %>
但是你的观点是_social_networks_fields.html.erb
你不能把 _social_networks_fields.html.erb 重命名为 _social_networks.html.erb 吗?
同时更改您的添加关联 link:
<div class="links">
<%= link_to_add_association 'Ajouter', f, :social_networks, :partial => 'social_networks' %>
</div>
或者直接使用
<%= render 'social_networks_fields', f: sn %>
而且你不需要 social_networks.html.erb