2012-02-16 117 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