spec / factory / company.rb
FactoryBot.define do
factory :company do
name { Faker::Name.unique.name }
time_zone_name { Faker::Address.time_zone }
users { [ FactoryBot.create(:user) ] }
end
end
spec / factory / company.rb
FactoryBot.define do
factory :user do
email { Faker::Internet.email }
password {'123qwe123'}
name { Faker::Superhero::name }
association :company, factory: :company
end
end
app / model / company.rb
class Company < ApplicationRecord
validate :check_users_present?
has_many :users
private
def check_users_present?
errors.add(:base, "You must provide at least one user") if users.size < 1
end
end
app / model / user.rb
class User < ApplicationRecord
belongs_to :company
end
, когда я пытаюсь сделать :company
он выбрасывает SystemStackError (stack level too deep)
.
, поскольку у нас есть проверка для создания хотя бы одного пользователя с компанией, и пользователю требуется компания. у нас проблема с циклической зависимостью.
Я пробовал это решение, но, похоже, это не исправляет. или я не уверен, как это сделать правильно ( Как избежать циклического создания связанных моделей в factory_girl? )
я пытался использовать transient
, но я не уверен, как его настроить для has_many ассоциаций. пожалуйста, может кто-нибудь помочь мне разобраться в этом