Сильные параметры для вложенных атрибутов с вложенными атрибутами?

У меня есть «Рецепт», который имеет_много «Ilists» и «Ilist» имеет_one «ингредиент», я пытаюсь представить все в одной форме, но у меня проблема с сильными параметрами. Я могу отправить форму, но, глядя на консоль, я вижу в запросе POST:

"Unpermitted parameter: ingredient_attributes"

recipes_controller.rb

class RecipesController < ApplicationController
 before_action :set_recipe, only: [:show, :edit, :update, :destroy]

def index
  @recipes = Recipe.all
end
def create
  @recipe = Recipe.new
  6.times { @recipe.ilists.build }
end
. 
.
private
  def recipe_params
    params.require(:recipe).permit(:title, :photo, ... , :description, :calories, ilists_attributes: [ :ingredient_attributes, :quantity])
  end
end

Пробовал писать так, но не работает:

, ilists_attributes: [ ingredient_attributes: [ name, calories, ... ], :quantity])

Пожалуйста, помогите, это убивает меня!

это форма, с которой я отправляю

 <%= f.fields_for :ilists do |builder| %>
  <tr>

  <%= builder.fields_for :ingredient, Ingredient.new do |b| %>
    <td><%= b.collection_select(:_id, Ingredient.all, :id, :name) %></td>
  <% end %>

  <td><%= builder.text_field :quantity %></td>

  </tr>

person user2482038    schedule 14.04.2016    source источник
comment
Как выглядят ваши параметры POST и какой html генерируется для тега выбора ингредиента? Соответствуют ли они ожидаемому?   -  person hypern    schedule 14.04.2016


Ответы (2)


Вы близко. Здесь всего пара правил.

Вот правильное объявление сильных параметров

def recipe_params
  params.require(:recipe).permit(:name , ilists_attributes:  [ :quantity, ingredients_attributes: [ :name, :calories ]])
end
  1. Убедитесь, что вы используете множественное число объектов (в вашем случае это должны быть ингредиенты_атрибуты, а не ингредиенты)
  2. убедитесь, что вы помещаете отдельные атрибуты ПЕРЕД вложенным массивом атрибутов (в вашем случае переместите количество в начало списка перед ингридиентами_атрибутами)
  3. Убедитесь, что есть цвет: после атрибутов
person trh    schedule 14.04.2016
comment
находится не в атрибутах ingredient_attributes для ассоциации has_one? - person user2482038; 14.04.2016
comment
да действительно. Я не говорил, что эта часть была неправильной, просто вы должны знать о множественном числе :) - person trh; 14.04.2016
comment
Я новичок в рельсах, и я усвоил это на собственном горьком опыте: P - person user2482038; 15.04.2016

Я нашел решение где-то еще, все, что мне нужно было сделать, это поменять атрибуты ингредиентов на другую сторону.

, ilists_attributes: [ :quantity, ingredient_attributes: [ name, calories, ... ] ])
person user2482038    schedule 14.04.2016