実現したいこと
アソシエーションの挙動を理解したいです。
出力結果に対する私の解釈が正しいかご判断していただきたいです。
前提
今RSpecを学習している初心者です。
factory botというダミーデータ作成のgemを使っているのですが
私のアソシエーションの挙動の理解が浅いと自分で思っているので私の解釈が合っているかご判断していただきたいです。
私のコードと私のコードの解釈
データの関係性 user(owner)がprojectを持っておりprojectがnoteを持っている
1対1対1です。
spec/factories/users.rb FactoryBot.define do factory :user, aliases: [:owner] do first_name { "ロロノア" } last_name { "ゾロ" } sequence(:email) { |n| "tester#{n}@example.com" } password { "dottle-nouveau-pavilion-tights-furze" } end end
spec/factories/projects.rb FactoryBot.define do factory :project do sequence(:name) { |n| "Test Project #{n}" } description { "Sample project for testing purposes" } due_on { 1.week.from_now } association :owner end end
spec/factories/notes.rb FactoryBot.define do factory :note do message { "My important note." } association :project association :user end end
spec/models/note_spec.rb # ファクトリで関連するデータを生成する it "generates associated data from a factory" do note = FactoryBot.create(:note) puts "This note's project is #{note.project.inspect}" puts "This note's user is #{note.user.inspect}" end
↑このようにしてtestを走らせ作成されたデータを見ると
出力結果 This note's project is #<Project id: 2, name: "Test Project 5", description: "Sample project for testing purposes", due_on: "2023-03-29", created_at: "2023-03-22 02:21:02.527864000 +0000", updated_at: "2023-03-22 02:21:02.527864000 +0000", user_id: 2> This note's user is #<User id: 3, email: "tester10@example.com", created_at: "2023-03-22 02:21:02.545534000 +0000", updated_at: "2023-03-22 02:21:02.545534000 +0000", first_name: "ロロノア", last_name: "ゾ ロ", authentication_token: [FILTERED], location: nil>
出力結果の疑問と私の解釈
疑問
①user_id: 2とUser id: 3でuserが2人作成されている。
私の解釈
spec/factories/notes.rb FactoryBot.define do factory :note do message { "My important note." } association :project association :user end end
userが2人作成されたのは
factory notesのassociation :project⇦このアソシエーションでnoteを持ったprojectのuser(owner)が最初に作成され、その次にassociation :user⇦この表記によりprojectを持たないnoteを持ったuserが作成されているので結果userが2つ作成された。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。