I have 2 Models:
# user.rb
class User < ActiveRecord::Base
has_one :profile, :dependent => :destroy
end
# profile.rb
class Profile < ActiveRecord::Base
belongs_to :user
validates_presence_of :user
end
# user_factory.rb
Factory.define :user do |u|
u.login "test"
u.association :profile
end
I want to do this:
@user = Factory(:user)
=> #<User id: 88,....>
@user.profile
=> #<Profile id:123, user_id:88, ......>
@user = Factory.build(:user)
=> #<User id: nil,....>
@user.profile
=> #<Profile id:nil, user_id:nil, ......>
But this doesn’t work!
It tells me that my profile model isn’t correct because there is no user! (it saves the profile before the user, so there is no user_id…)
How can I fix this? Tried everything.. 🙁
And I need to call Factory.create(:user)…
UPDATE
Fixed this issue – working now with:
# user_factory.rb
Factory.define :user do |u|
u.profile { Factory.build(:profile)}
end
# user.rb
class User < ActiveRecord::Base
has_one :profile, :dependent => :destroy, :inverse_of => :user
end
# profile.rb
class Profile < ActiveRecord::Base
belongs_to :user
validates_presence_of :user
end
Fix it that way (as explained in this post)
What you can do as well (as a user don’t need a profile to exist (there’s no validation on it) is to do a two steps construction
and then
I guess in that case you even just need one step, create the user in the profile factory and do
That seems the right way to do it, isn’t it?
Update
(according to your comment) To avoid saving the profile use Factory.build to only build it.