0

私は典型的な基本的な問題を抱えていますが、それに対する良い解決策を見つけることができません。値を割り当てるために使用される結合テーブルを使用して、Railsの典型的な多対多の関係を考えてみましょう。

Recipe
    has_many :recipe_ingredients
    has_many :ingredients, :through => :recipe_ingredients
    accepts_nested_attributes_for :recipe_ingredients

Ingredient
    has_many :recipe_ingredients
    has_many :recipes, :through => :recipe_ingredients

RecipeIngredient
    belongs_to :recipe
    belongs_to :ingredient
    attr_accessible :quantity

ここでは何も奇妙なことはありません。今、新しい材料を使った新しいレシピを一度に作成したいとしましょう。次のようにJSONをサーバーに送信します。

{"recipe"=>
    {"name"=>"New Recipe", 
     "ingredients"=>
        [{"name" => "new Ingr 1", "quantity"=>0.1},
         {"name" => "new Ingr 2", "quantity"=>0.7}]
    }
}

パラメータをナビゲートしてオブジェクトを1つずつ作成できると思いますが、多対多の関連付け、とりわけを活用することを検討していたため、オブジェクトツリーを作成するaccepts_nested_attributes_forことができました。Recipe.create(params[:recipe])それが送信されるJSONを変更することを意味する場合、それは問題ではありません。:)

4

1 に答える 1

0

JSONキーは次のようになります"ingredients_attributes"

Recipe
  has_many :recipe_ingredients
  has_many :ingredients, :through => :recipe_ingredients
  attr_accessible :ingredients
  accepts_nested_attributes_for :ingredients # note this

{"recipe"=>
  {"name"=>"New Recipe", 
    "ingredients_attributes"=>
      [{"name" => "new Ingr 1", "quantity"=>0.1},
       {"name" => "new Ingr 2", "quantity"=>0.7}]
  }
}
于 2012-11-08T15:43:46.767 に答える