Rails - вложенные поля Cocoon / простой формы не отображаются - PullRequest
0 голосов
/ 21 мая 2018

Я пытаюсь создать вложенные поля в разделе редактирования / создания книги рецептов для ингредиентов, указаний и посуды, но отображается только контур полей, без вложенных битов.

Модели

class Recipe < ApplicationRecord
    has_many :ingredients
    has_many :directions
    has_many :utensils

    accepts_nested_attributes_for :ingredients, reject_if: proc { |attributes| 
    attributes['name'].blank? }, allow_destroy: true

    accepts_nested_attributes_for :directions, reject_if: proc { |attributes| 
    attributes['step'].blank? }, allow_destroy: true

    accepts_nested_attributes_for :utensils, reject_if: proc { |attributes| 
    attributes['name'].blank? }, allow_destroy: true
end

class Ingredient < ApplicationRecord
    belongs_to :recipe
end

class Direction < ApplicationRecord
    belongs_to :recipe
end    

class Utensil < 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], utensils_attributes: [:id, :name, :_destroy])
end

Просмотр

<div class="row">
    <div class="col-md-4">
      <h3>Ingredients</h3>
      <div id="ingredients">
        <%= f.simple_fields_for :ingredients do |ingredient| %>
          <%= render "ingredients_fields", f: ingredient %>
          <div class="links">
            <%= link_to_add_association "Add Ingredient", f, :ingredients, class: "btn btn-default add-button" %>
          </div>
        <% end %>
      </div>
    </div>

    <div class="col-md-4">
      <h3>Directions</h3>
      <div id="directions">
        <%= f.simple_fields_for :directions do |direction| %>
          <%= render "directions_fields", f: direction %>
          <div class="links">
            <%= link_to_add_association "Add Step", f, :directions, class: "btn btn-default add-button" %>
          </div>
        <% end %>
      </div>
    </div>

    <div class="col-md-4">
      <h3>Utensils</h3>
      <div id="utensils">
        <%= f.simple_fields_for :utensils do |utensil| %>
          <%= render "utensils_fields", f: utensil %>
          <div class="links">
            <%= link_to_add_association "Add Utensil", f, :utensils, class: "btn btn-default add-button" %>
          </div>
        <% end %>
      </div>
    </div>
  </div>


  <%= f.button :submit, class: "btn btn-primary" %>
  </div>

Частично (для направления)

<div class="form-inline.clearfix">
    <div class="nested-fields">
    <%= f.input :step, input_html: { class: "form-input form-control" } %>
    <%= link_to_remove_association "Remove", f, class: "form-button btn btn-default" %>
    </div>
</div>

Схема для посуды также не отображается, и я не уверен, почему.

Вот чтоэто выглядит так: вложенные формы не отображаются

Любая помощь будет оценена, спасибо!

1 Ответ

0 голосов
/ 23 мая 2018

Есть ли вложенные элементы?

Потому что, если их нет, это объясняет поведение: ваш link_to_add_association находится внутри цикла simple_fields_for, поэтому он будет отображаться для каждого вложенного элемента, но он также никогда не будет отображаться, если его нет.(примечание: это может быть желательным поведением, но я предполагаю, что в большинстве случаев это не так).

Все примеры в документации по коконам помещают link_to_add_association вне петли simple_fields_for.Если у вас проблемы с чтением хамла, посмотрите примеры ERB .

...