具有嵌套属性的嵌套属性的强参数?

时间:2016-04-14 15:58:21

标签: ruby-on-rails mongoid strong-parameters

我有一个"食谱" has_many" Ilists"和#Il;" Ilist" has_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>
  

2 个答案:

答案 0 :(得分:1)

你关闭了。这里只需遵循几条规则。

以下是正确的强对手声明

def recipe_params
  params.require(:recipe).permit(:name , ilists_attributes:  [ :quantity, ingredients_attributes: [ :name, :calories ]])
end
  1. 确保复数多个对象(在您的情况下,它应该是ingredients_attributes而不是成分)
  2. 确保在嵌套的属性数组之前放置单个属性(在您的情况下,在ingredients_attributes之前将quanity移动到列表的前面)
  3. 确保有颜色:属性

答案 1 :(得分:0)

我在其他地方找到了解决方案我只需要将成分属性交换到另一面。

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