Rails 5 中未显示茧嵌套形式
Cocoon nested form not showing in Rails 5
我有一个模型食谱和一个模型成分。配方 has_many :成分,以及成分 belongs_to :配方。
我正在使用 Cocoon 和简单表单来创建嵌套表单。
主窗体正在工作并正在显示,但由于某种原因,嵌套窗体未呈现。
知道为什么吗?
型号
class Recipe < ApplicationRecord
has_many :ingredients
end
class Ingredient < ApplicationRecord
belongs_to :recipe
end
配方控制器(参数)
def recipe_params
params.require(:recipe).permit(:title, :description, :image,
ingredients_attributes: [:id, :name, :_destroy],
directions_attributes: [:id, :step, :_destroy])
end
查看
<%= simple_form_for @recipe do |f| %>
<div class="field">
<h3>Recipe</h3>
<%= f.input :title %>
<%= f.input :description %>
<%= f.input :image, as: :file %>
<div id="ingredients">
<h3>Ingredients</h3>
<%= f.simple_fields_for :ingredients do |ingredient| %>
<p>ajsd</p>
<%= render 'ingredients_fields', f: ingredient %>
<%= link_to_add_associtation 'Add Ingredient', f, :ingredients %>
<% end %>
</div>
<%= f.button :submit, class: "button button-highlight button-block" %>
</div>
<% end %>
div#ingredients 中的 simple_forms 未呈现。
您的嵌套字段表单使用以下代码显示:
<%= f.simple_fields_for :ingredients do |ingredient| %>
<p>ajsd</p>
<%= render 'ingredients_fields', f: ingredient %>
<%= link_to_add_associtation 'Add Ingredient', f, :ingredients %>
<% end %>
simple_fields_for
中的代码对@recipe 中的每个成分执行一次(如果@recipe 没有任何成分则不会显示)。
我猜你正在创建一个空的食谱。您可以做的是在新方法中向食谱中添加一个空成分:
@recipe.ingredients.build
这将在表单中显示一个空的食谱。
另一个重要问题是 link_to_add_association
(您的 OP 中有错字)在 simple_fields_for
内。它必须在外面,所以它显示在最后,即使没有成分。
最后,你还缺:
accepts_nested_attributes_for :ingredients, reject_if: :all_blank, allow_destroy: true
我有一个模型食谱和一个模型成分。配方 has_many :成分,以及成分 belongs_to :配方。 我正在使用 Cocoon 和简单表单来创建嵌套表单。 主窗体正在工作并正在显示,但由于某种原因,嵌套窗体未呈现。 知道为什么吗?
型号
class Recipe < ApplicationRecord
has_many :ingredients
end
class Ingredient < ApplicationRecord
belongs_to :recipe
end
配方控制器(参数)
def recipe_params
params.require(:recipe).permit(:title, :description, :image,
ingredients_attributes: [:id, :name, :_destroy],
directions_attributes: [:id, :step, :_destroy])
end
查看
<%= simple_form_for @recipe do |f| %>
<div class="field">
<h3>Recipe</h3>
<%= f.input :title %>
<%= f.input :description %>
<%= f.input :image, as: :file %>
<div id="ingredients">
<h3>Ingredients</h3>
<%= f.simple_fields_for :ingredients do |ingredient| %>
<p>ajsd</p>
<%= render 'ingredients_fields', f: ingredient %>
<%= link_to_add_associtation 'Add Ingredient', f, :ingredients %>
<% end %>
</div>
<%= f.button :submit, class: "button button-highlight button-block" %>
</div>
<% end %>
div#ingredients 中的 simple_forms 未呈现。
您的嵌套字段表单使用以下代码显示:
<%= f.simple_fields_for :ingredients do |ingredient| %>
<p>ajsd</p>
<%= render 'ingredients_fields', f: ingredient %>
<%= link_to_add_associtation 'Add Ingredient', f, :ingredients %>
<% end %>
simple_fields_for
中的代码对@recipe 中的每个成分执行一次(如果@recipe 没有任何成分则不会显示)。
我猜你正在创建一个空的食谱。您可以做的是在新方法中向食谱中添加一个空成分:
@recipe.ingredients.build
这将在表单中显示一个空的食谱。
另一个重要问题是 link_to_add_association
(您的 OP 中有错字)在 simple_fields_for
内。它必须在外面,所以它显示在最后,即使没有成分。
最后,你还缺:
accepts_nested_attributes_for :ingredients, reject_if: :all_blank, allow_destroy: true