以下の通りLesson
とSituation
の間に多対多の関連付けを組んでおり、通常の動作(new/create/edit/update
)には問題ありません。
初期データとしてseedファイル内にて最初から関連付けがされた状態としたいのですが、lesson.situations << Situation.all.sample
をLesson
modelのseed
ファイルに記載したところ、ActiveRecord::AssociationTypeMismatch:Situation(#70127423708740) expected, got NilClass(#70127366627340)
といったエラーが出てしまい解決できず、やり方をご教示頂けますと大変助かります。
ちなみに、associationを無理やりseedファイル内にて定義しなければ、seed
ファイルは通ります。
また、rails c
で同じコマンドを打つと、確り機能します。
ruby
1[1] pry(main)> lesson = Lesson.find(42);0 2 Lesson Load (0.8ms) SELECT "lessons".* FROM "lessons" WHERE "lessons"."id" = $1 LIMIT $2 [["id", 42], ["LIMIT", 1]] 3=> 0 4[2] pry(main)> situation = Situation.all.sample;0 5 Situation Load (0.6ms) SELECT "situations".* FROM "situations" 6=> 0 7[3] pry(main)> lesson.situations << situation;0 8 (0.4ms) BEGIN 9 SQL (0.6ms) INSERT INTO "lessons_situations" ("situation_id", "lesson_id") VALUES ($1, $2) [["situation_id", 2], ["lesson_id", 42]] 10 (4.8ms) COMMIT 11=> 0 12[4] pry(main)> lesson.situations.count 13 (1.3ms) SELECT COUNT(*) FROM "situations" INNER JOIN "lessons_situations" ON "situations"."id" = "lessons_situations"."situation_id" WHERE "lessons_situations"."lesson_id" = $1 [["lesson_id", 42]] 14=> 3
###前提
model
はLesson
とSituation
の2つで、各々のtable
含むmodel
は以下の通りです。また、Lesson
とSituation
の間にjoin tableを組んでます。(以下コード内に記載)
rby
1#Lesson modelとtable 2 id :integer not null, primary key 3 title :string 4 created_at :datetime not null 5 updated_at :datetime not null 6 7class Lesson < ApplicationRecord 8 has_and_belongs_to_many :situations 9 10#Situation modelとtable 11 id :integer not null, primary key 12 name :string 13 created_at :datetime not null 14 updated_at :datetime not null 15 16class Situation < ApplicationRecord 17 has_and_belongs_to_many :lessons 18end 19 20class CreateJoinTableSituationLesson < ActiveRecord::Migration[5.0] 21 def change 22 create_join_table :situations, :lessons do |t| 23 # t.index [:situation_id, :lesson_id] 24 # t.index [:lesson_id, :situation_id] 25 end 26 end 27end
seeds
ファイルです。Situation
からsample
メソッドを用いてランダムに取り出し、Lesson
に関連つけたいとの意図です。
lesson.situations << Situation.all.sample
に誤りがあること明らかですが、正しい書き方が分かりません。。
ruby
1#Lesson Modelのseedファイル 21.upto(10) do |n| 3 lesson = Lesson.create( 4 title: "#{titles[n % 4]}", 5 posted_at: 20.days.ago.advance(days: n), 6 updated_at: 20.days.ago.advance(days: n+2), 7 ) 8 lesson.situations << Situation.all.sample 9end 10 11#Situation Modelのseedファイル 12areas_of_situations = %w(日常 デート オフィス 面接/就活 パーティー 結婚式 季節 クラブ コスプレ ハロウィン 特殊 その他) 13 14areas_of_situations.each do |name| 15 Situation.create(name: name) 16end 17
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。