おそらくこれはRailsが動作する方法ですが、私はそれが初めてであるため再確認したいのですが、何か不足しているかどうかわかりません。belongs_to関係は保存するまで動作しません - 私は間違っていますか?
多くのネストされたhas_many/belongs_to関係を持つかなり複雑なモデルを作成しています。最初は、create()メソッドを使用してみましたが、データベース接続が毎回開始されるため、終了するまでに多くの時間がかかりました。代わりにnew()を使用してすべてのオブジェクトを作成し、< <を使用してネストされたモデルを上位モデルに追加し、最後に最上位モデルでsave()を実行します。
これはすべて動作しますが、私がセーブするまではbelongs_to関係は機能しません。言い換えれば、
class Foo < ActiveRecord::Base
has_many :bars
end
class Bar < ActiveRecord::Base
belongs_to :foo
end
f = Foo.new
b = Bar.new
f.bars << b
puts "It's nil!" if b.foo == nil #yup, it's nil
f.save
puts "It's good!" if b.foo != nil #yup, it's good
私は推測します。実際にはにはというIDがあり、それが保存されるまで起こらない限り、Fooを指すようにidフィールドを設定することはできません。それは大したことではない、私は最初に(やや複雑な)初期化を書いた方法、低レベルのモデルの1つが祖父母から何らかの情報を得るために呼び出されていて、それが動作していなかったために気がついた。とにかくそれを取り除いたコードはきれいだったが、私はそれが完全に間違ったやり方でやっているというこのやつな気持ちを助けることはできないし、実際に保存するまでhas_many関係が一時的に壊れてしまう状況はないはずですデータベース。
誰でも私の心を安らかにしたいと思っていますか、それとも私に「正しい」方法を伝えたいですか?
あなただけf.bars.new使用カントを行うことなく、自動的に関係を設定するには
を行うことができますか? –
私はf.bars.newが同じ問題を抱えていると信じています。実際のコードでは、Barを構築するために別の関数を呼び出すので、<< collection.newよりも<<を使用する方が理にかなっています。私はこのおもちゃの例に同意する、それはそんなことをするのは馬鹿だ。 – user435779