2012-02-16 72 views

回答

27

Ruby不知道您是要调用alias的方法,还是将另一种方法别名,并且默认为后者。你可以通过做消除歧义

self.alias "dummy" 

即,通过明确指定接收者。在其他情况下,如果您正在调用方法或执行其他操作

self.foo = 'bar' 

调用foo=方法,而不是创建一个名为foo的一个局部变量。

对于small number of field names这不起作用。工厂女孩的DSL使用method_missing,因此如果DSL对象具有该名称的方法,它将被调用。在这种情况下,你可以做什么的DSL糖正常为你做,并直接调用add_attribute

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

相同

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

使用'self.alias'完成了诀窍。尽管我已经尝试过,但我仍然乐观。 ( - :谢谢! – 2012-02-16 21:22:35

+3

只是有这个问题,我的模型有一个名为“end”的属性,'self.end'使它工作。 – GMA 2014-01-08 12:35:19

+2

该死的,这对名为'method'的字段不起作用。 – 2014-12-02 00:55:41

0

定义就可以了factory .. do块和调用方法的变量。

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