Наличие внешнего ключа dest_user_id
не должно изменять подход, если отношение остается таким же, как и у модели.Предполагая, что contact
belongs_to
user
и user
либо has_one
или has_many
contacts
, вы можете достичь того, что вы хотите, следующим образом:
Сначала создайте фабрики:
FactoryGirl.define do
factory :user do
Field 1
Field 2
# etc
end
factory :contact do
# Add only the minimum fields required to create a contact, but not the association
Field 1
Field 2
factory :contact_with_user do
# then you add the association for this inherited factory
# we can use 'user' here as the factory is the same as the association name
user
end
end
end
С помощью этой настройки вы создаете contact
без user
, и поэтому dest_user_id
равен NULL
, когда вы используете FactoryGirl.create(:contact)
в своем тесте / спецификации.
Длясоздайте user
и присвойте идентификатор в поле dest_user_id
на contact
, в котором вы будете использовать следующее:
@user = FactoryGirl.create(:user)
@contact = FactoryGirl.create(:contact_with_user, :user => @user)
Такой подход обеспечивает максимальную гибкость, так как вы можете создать contact
с или безпользователь, и вы можете передать user.id
в модель контакта, только если он вам нужен для определенного теста.Если вы наберете FactoryGirl.create(:contact_with_user)
, то автоматически будут созданы contact
и user
, но вы не сможете управлять назначением dest_user_id
, которое вы получите при использовании FactoryGirl.create(:contact_with_user, :user => @user)