コントローラーのメソッド内のデータベースで2つの挿入操作を実行したい:
a = A.new(:dog_id => b.id, ...)
a.save
b = B.new(:cat_id => a.id , ... )
b.save
b の a の id と a の b の id が必要なため、これを行うにはどうすればよいですか?
コントローラーのメソッド内のデータベースで2つの挿入操作を実行したい:
a = A.new(:dog_id => b.id, ...)
a.save
b = B.new(:cat_id => a.id , ... )
b.save
b の a の id と a の b の id が必要なため、これを行うにはどうすればよいですか?
最初に正しい関連付けを使用してモデル A + B をセットアップします
Model Cat
has_one :dog
accepts_nested_attributes_for :dog
Model Dog
has_one :cat
accepts_nested_attributes_for :cat
A の各インスタンスは 1 つの B しか持てず、その逆も同様です。2006年からの古い説明の代わりに belongs_to を使用することもできます
Accepts_nested_attributes_for を使用すると、関連付けられたモデルの属性を元のモデルのパラメーターに渡す ことができます。
コントローラーでモデルのインスタンスを構築し、それらの関連付けを設定します。
this_cat = Cat.new(cat_attributes{dog_attributes})
this_cat.save!
これを行うにはいくつかの方法があることは確かですが、Aldo が言うように、質問コードをもう少し詳しく説明すると、関連付けのいくつかを明確にするのに役立ちます。
accept_nested_attributes_for を使用しない別の方法は、A と B の各インスタンスを構築し、それらの 1 つを保存し、関連付けを行ってから両方を保存することです。
this_cat = Cat.new(cat_attributes)
this_dog = Dog.new(dog_attributes)
this_dog.save!
this_cat.dog = this_dog
this_cat.save!
this_dog.save!
A、B、C?あなたは何をしようとしていますか?Category
多くの犬がいるモデルとカテゴリに属するモデルがある場合Dog
は、カテゴリがあり、新しい犬を作成するときに、を使用してカテゴリを割り当てるだけdog.category = Category.find_by_name(category_name)
です。
...しかし、犬とカテゴリの間にある種の多対多の関係があると思います。その場合は、別のモデルとデータベーステーブルが必要です...
更新:それでも私には意味がありません。さらに詳細を提供してみてください...別のアイデアは、2つのオブジェクトを作成してから更新することです:
# Create the two objects
a = A.create
b = B.create
# Update a with the B id
a.dog = b
a.save
# Update b with the A id
b.cat = a
a.save
しかし、繰り返しになりますが、あなたは本当にあなたが達成しようとしていることを説明するためにあなたの答えを更新する必要があります