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