2012-10-07 10 views
9

Dentro de una fábrica, ¿cómo me refiero al valor de uno de los otros campos en el objeto que se está creando?en factorygirl, cualquier forma de referirse al valor de field1 al inicializar field2?

Supongamos que mi modelo Widget tiene dos campos, nickname y fullname

Dentro de mi fábrica, quiero usar Faker crear un apodo aleatorio diferente cada vez que se crea una fábrica. (Finalmente descubrí que tengo que usar la secuencia (: apodo), de lo contrario, el nombre es el mismo para todas las fábricas.)

Para hacer algunas de las aserciones más fáciles de probar, quiero generar un nombre completo que sea sobre la base de apodo, algo así como fullname = "Full name for #{nickname}"

FactoryGirl.define do 
    factory :widget do 
    sequence(:nickname) { |n| Faker::Lorem.words(2).join(' ') } 
    sequence(:fullname) { |n| "Full name for " + ????? } 
    end 
end 

lo que pongo en el que el ??? va, obtengo #<FactoryGirl::Decl... en lugar de cualquier apodo que haya configurado.

Intenté name, name.to_s, name.value ... nada parece funcionar.

Respuesta

12

Sí. He aquí un ejemplo de la chica de la fábrica de Getting Started doc:

factory :user do 
    first_name "Joe" 
    last_name "Blow" 
    email { "#{first_name}.#{last_name}@example.com".downcase } 
end 

FactoryGirl.create(:user, last_name: "Doe").email 
# => "[email protected]" 

Además, por lo general defino mis secuencias por separado, en config/application.rb:

FactoryGirl.define do 
    sequence(:random_string) { |s| ('a'..'z').to_a.shuffle[0, 30].join } 
end 

Es posible beneficiarse de hacer lo mismo. Entonces probablemente podría hacer algo como:

FactoryGirl.define do 
    factory :widget do 
    nickname generate(:name_faker) # assuming you had defined a :name_faker sequence 
    fullname generate("Full name for #{nickname}") 
    end 
end 
+0

Eso fue lo primero que he intentado en mi código de ejemplo en la cuestión, pero en lugar de # {campo1} dando el valor del campo, se produce algún objeto # jpwynn

+0

Bien, me lo perdí. Verifique mi respuesta actualizada. –

+0

buen truco, voy a intentarlo gracias! – jpwynn

Cuestiones relacionadas