2012-07-06 34 views
5

Tôi có ví dụ nàyLàm thế nào để tiết kiệm một biến địa phương trong một nhà máy

FactoryGirl.define do 
    @site = FactoryGirl.create(:my_site) 
    factory :user do 
    email    { Faker::Internet.email } 
    first_name   { Faker::Name.first_name } 
    last_name   { Faker::Name.last_name } 
    password   { 'TarXlrOPfaokNOzls2U8' } 
    active_directory { '0' } 
    companies   { [FactoryGirl.create(:company, site: @site)] } 
    sites    { [@site] } 
    end 
end 

Có cách nào để đạt được điều này với một let hoặc một cái gì đó ...

FactoryGirl.define do 
    factory :user do 
    email    { Faker::Internet.email } 
    first_name   { Faker::Name.first_name } 
    last_name   { Faker::Name.last_name } 
    password   { 'TarXlrOPfaokNOzls2U8' } 
    active_directory { '0' } 
    companies   { [FactoryGirl.create(:company, site: FactoryGirl.create(:my_site))] } 
    sites    { [FactoryGirl.create(:my_site)] } 

    end 
end 

này hoạt động nhưng nó tạo hai my_site là đối tượng Trang web nhưng tôi cần chúng giống nhau ... bất kỳ ý tưởng nào về cách đạt được điều này

+3

vấn đề với biến cục bộ là gì? 'site = FactoryGirl.create (: my_site)' – tokland

+0

quyền của bạn đã hoạt động – Trace

Trả lời

13

Có lẽ cách đơn giản nhất là sử dụng biến cục bộ:

FactoryGirl.define do 
    site = FactoryGirl.create(:my_site) 

    factory :user do 
    email    { Faker::Internet.email } 
    first_name   { Faker::Name.first_name } 
    last_name   { Faker::Name.last_name } 
    password   { 'TarXlrOPfaokNOzls2U8' } 
    active_directory { '0' } 
    companies   { [FactoryGirl.create(:company, site: site)] } 
    sites    { [site] } 
    end 
end 
Các vấn đề liên quan