2012-02-16 21 views

Respuesta

27

Ruby no sabe si está tratando de llamar a un método llamado alias o alias un método como otro, y se predetermina a este último. Puede desambiguar haciendo

self.alias "dummy" 

es decir, especificando explícitamente el receptor. Por lo general, este es el camino a seguir en otros casos en los que es ambiguo si llama a un método o está haciendo otra cosa, p.

self.foo = 'bar' 

para llamar al método foo= en lugar de crear una variable local llamada foo.

Para un small number of field names esto no funcionará. El DSL de Girl Factory usa method_missing, por lo tanto, si el objeto DSL tiene un método de ese nombre, se lo llamará en su lugar. En esos casos se puede hacer lo que hace el azúcar DSL normal para usted y llamar add_attribute directamente:

FactoryGirl.define do 
    factory :blah do 
    add_attribute :name, "some value" 
    end 
end 

es lo mismo que

FactoryGirl.define do 
    factory :blah do 
    name "some value" 
    end 
end 
+1

Usando 'self.alias' hizo el truco. Estaba seguro de que ya lo había intentado. (-: ¡Gracias! –

+3

Estaba teniendo este problema donde mi modelo tiene un atributo llamado "end". 'Self.end' lo hace funcionar. – GMA

+2

Maldición, esto no funciona para los campos denominados' método'. –

0

definir una variable para los factory .. do bloque y llamar a métodos en ella.

FactoryGirl.define do 
    factory :blah do |f| 
    f.name "dummy" 
    f.alias "dummy" 
    end 
end 
Cuestiones relacionadas