2013-05-01 3 views
1

Я пытаюсь создать ассоциацию has_many factorygirl с ассоциацией polmorphic, используя новый синтаксис. Вот код. Он неправильно строит адрес и связывает его с сайтом.Factory Girl with polymorphic has_many association

class Address < ActiveRecord::Base 

    belongs_to :addressee, :polymorphic => true 

end 

class Site < ActiveRecord::Base 

    has_many addresses, :as => :addressee, :dependent => :destroy 

end 

***** FACTORYGIRL ****** 


FactoryGirl.define do 
    factory :address, class: 'Address' do 
     property_type "House" 
     street_number "31" 
     street_type "STREET" 
     suburb "XXXXX" 
     postcode "XXXX" 
    end 

    factory :site_address, class: 'Address' do 
     property_type "House" 
     street_number "31" 
     street_type "STREET" 
     suburb "XXXX" 
     postcode "XXXX" 
     site 
    end 
end 


FactoryGirl.define do 

    factory :site, class: 'Site' do 
     name "MyString" 
     organisation_category nil 
     service_type_organisation_category_id 1 
     telephone "MyString" 
     fax "MyString" 
     email "MyString" 
     url "MyString" 
     clinical_software_package_id 1 
     billing_software_package_id 1 
     bulk_billing false 
     disabled_access false 
     ncacch false 
     parking false 
     organisation nil 

     factory :site_with_addresses do 
      ignore do 
       address_count 1 
      end 

      after (:create) do |site,evaluator| 
       FactoryGirl.create_list(:site_address, evaluator.address_count, addressee: site) 
      end 
     end 

    end 


end 

ответ

2

Вы не объявили ассоциацию в пределах завода по адресу, попробуйте

factory :address, class: 'Address' do 
    property_type "House" 
    street_number "31" 
    street_type "STREET" 
    suburb "XXXXX" 
    postcode "XXXX" 
    association :addressee, :factory => :site 
end 

См https://github.com/thoughtbot/factory_girl/blob/master/GETTING_STARTED.md#associations для более подробной информации о том, как настроить ассоциации

+1

Я думаю, что это не сработает. Потому что у него нет фабрики под названием «адресат». 'Если имя фабрики такое же, как ассоциация name' – ck3g

+0

Эй, ребята, https://gist.github.com/emilevictor/a376231cf11345b35e1b Вот источник factorygirl для моих сайтов фабрики. Я думал, что включил его, но вместо этого я случайно включил фабрику адресов. Соответствующий код: site_address и: site. Текущий метод, который я использую (как показано на сайте), неверен. –

+0

Это отлично сработало для меня. Похоже, что FactoryGirl понимает, что ': addressee' является полиморфной ассоциацией и правильно устанавливает свойства': addressee_id' и ': addressee_type' объекта Address. – Franco

0

Эта сущность может помочь - https://gist.github.com/travisr/2830535/

class Alert < ActiveRecord::Base 
    belongs_to :alertable, :polymorphic => true 
end 


class Region < ActiveRecord::Base 
    has_many :alerts, :as => :alertable 
end 


FactoryGirl.define do 
    Factory.define :alert do |alert| 
    alert.alertable { |a| a.association(:region) } 
    end 
end 
Смежные вопросы