db / seeds.rbファイルを使用してデータベースに事前入力しようとすると、コードは次のようになります。
now = Time.now.beginning_of_hour
later = Time.now.end_of_hour + 1
sch1 = Schedule.create(start_time: now, stop_time: later)
sch1.channel = channel
sch1.program = cartoon
cartoon.schedules.push(sch1)
sch1.save
cartoon.save
ここで、channelとcartoonは、コードの前半でChannel.createとProgram.createを適切な値で定義しています。
Railsコンソールを見ると、3つのオブジェクト(チャネル、プログラム、スケジュール)がすべて存在していることがわかりますが、スケジュールにはprogram_idがありません。(schedule.programは何らかの理由で問題なく動作します)。プログラムのprogram.schedulesも空の配列です。
テストとして、コンソールで次のことを行いました。
now = Time.now.beginning_of_hour
later = Time.now.end_of_hour + 1
channel = Channel.first
cartoon = Program.first
sch1 = Schedule.create(start_time: now, stop_time: later)
sch1.channel = channel
sch1.program = cartoon
cartoon.schedules.push(sch1)
sch1.save
cartoon.save
それはうまくいきました。
シードの何が特別なのですか?後で参照する前にsaveを呼び出す必要がありますか?変数は明らかにnullではありません...