Suppose you have a case like that   
    
class Address < ActiveRecord::Base    
  belongs_to :addressable, polymorphic => true    
end    
    
class Listing < ActiveRecord::Base    
  has_one :address, as => :addressable    
end    
    
class Customer < ActiveRecord::Base    
  has_one :address, as => :addressable    
end    
    
Now in your factories you will have something like that    
    
Factory.define :listing do |f|    
  f.association :address    
end    
    
since addressable is required, we choose it to be by default related to a customer unless else stated    
    
Factory.define :address do |f|    
  f.association :addressable, :factory => :customer    
end
right now if you tried to use the Listing Factory, you will get an address associated with dummy customer and no effect on your side   
    
How can this be fixed ?     
    
Factory.define :listing do |f|    
  f.after_build do |listing|    
    listing.address = Factory.create(:address, :addressable => listing)    
  end    
end    
    
This was the only solution i found after searching for a while    
which is a good solution and doesn't need a lot of work to be done
 
3 comments:
Short, nice and simple solution. I was looking for it for some time and finally found it here. Thank you for that post!
This is an awesome post.
I wish it was more popular.
I have been having many issues using polymorphic associations (in my case they are has_many) and your post showed the path to go.
Thanks for this.
Nice. Thanks for the post!
Post a Comment