質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Ruby on Rails 6

Ruby on Rails 6は、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

RSpec

RSpecはRuby用のBDD(behaviour-driven development)フレームワークです。

Q&A

1回答

1779閲覧

双方で必須の外部キーを持っているときのFactoryBotの書き方について

ssk

総合スコア332

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Ruby on Rails 6

Ruby on Rails 6は、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

RSpec

RSpecはRuby用のBDD(behaviour-driven development)フレームワークです。

0グッド

0クリップ

投稿2021/07/24 01:02

編集2021/07/24 02:13

Userモデルにaffiliation_idが必須。Affiliationモデルにもuser_idが必須のときのFactoryBotの書き方を教えていただきたいです。
以下のコードではUserとAffiliationの双方で外部キーが必須のため、stack level too deepとなります。どのように回避するべきでしょうか。

関連

ruby

1# user.rb 2belongs_to :affiliation

ruby

1# affiliation.rb 2belongs_to :creator, class_name: 'User'

テスト

ruby

1# spec.rb 2let!(:user) { FactoryBot.create(:user) } 3let!(:affiliation) { FactoryBot.create(:affiliation) }

ruby

1# users_factory.rb 2Faker::Config.locale = :ja 3 4FactoryBot.define do 5 factory :user do 6 name { Faker::Name.last_name + Faker::Name.first_name } 7 affiliation { Affiliation.last || create(:affiliation) } 8 end 9end 10

ruby

1# affiliations_factory.rb 2FactoryBot.define do 3 factory :affiliation do 4 affiliation_number { 9563953 } 5 creator { User.last || create(:user) } 6 end 7end

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

それってFactoryでなく実系でも駄目でしょう。databaseサーバーの動きをシミュレートしてみて。
UserとAffilationとどちらが主要なmodelなのでしょう?
「主要」な方を「では無い方」が必須とする
ということになるのでは。

投稿2021/07/24 02:20

winterboum

総合スコア23567

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ssk

2021/07/24 02:46 編集

ご回答ありがとうございます。 Userは必ずAffiliationを持っていて、AffiliationはUserを必ず持っています。 言い換えると、ユーザーは必ずどこかに所属していて、所属を作成するときには必ず作成者が必要です。 (ユーザーが主要な気がしますが...) 関連の貼り方が間違っていて、工夫する必要がありますか?
winterboum

2021/07/24 03:49

それですと鶏と卵ですね。 お互いに必須になっているわけでは無い(Userが所属するAffiliation のcreater がそのUserでは、必ずしも、ない)ですから、 どうしても双方必須にしたければ、 まず一組つくって、それから必須にするのですかね。 てすとで実装は難しそう
ssk

2021/07/24 06:50

テストで実現できるかもう少し考えてみることにします。 ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問