3

fabricationgemを使用すると、循環依存関係が発生します。ここで、私が何をしたかをお見せします。2 つのモデルがあるとします。

class User < AR::Base
  has_many :messages


class Message < AR::Base
  belongs_to :user

したがって、それらの製造業者は次のようになります。

Fabricator(:user) do
  # bla-bla-bla
  messages(count: 5)
end

Fabricator(:message) do
  # bla-bla-bla
  user
end

大丈夫そうですよね?しかし、私が実行しFabricate(:user)たりFabricate(:message)、循環的な依存関係を取得したりすると、メッセージを作成すると新しいユーザーが作成され、新しいユーザーを作成すると彼へのメッセージが作成されるためです。どうすればこの悪魔の輪を避けることができますか?

4

1 に答える 1

2

通常、userこのような例では 2 人の製作者がいます。

Fabricator(:user)

Fabricator(:user_with_messages, from: :user) do
  messages(count: 5)
end

または、これを実行して、持っているものを機能させることもできます。

Fabricator(:user) do
  messages(count: 5) { Fabricate.build(:message, user: nil) }
end

ユーザーが保存されると、メッセージは AR によって自動的に保存されます。正しい参照の設定を処理します。

于 2015-06-20T11:48:02.357 に答える