2012-07-06 8 views
5

que tienen este ejemplo¿Cómo puedo guardar una variable local dentro de una fábrica

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 

¿Hay una manera de lograr esto con un let o algo ...

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 

Esto funciona, pero crea dos my_site que es un objeto Site pero necesito que sean iguales ... alguna idea sobre cómo lograr esto

+3

¿cuál es el problema con una variable local? 'site = FactoryGirl.create (: my_site)' – tokland

+0

su derecho que funcionó – Trace

Respuesta

13

Probablemente la más simple es usar una variable local:

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 
Cuestiones relacionadas