2012-06-16 37 views
2

在使用工廠女孩的寶石,我們創建一個語法factories.rb文件Rails的FactoryGirl定義語法

FactoryGirl.define do 
    factory :model do 
    ... 
    end 
    ... 
end 

那麼究竟是什麼FactoryGirl.define語法手段? 它是類似於

class FactoryGirl 
    def factory :model do 
    end 
end 

感謝

回答

2

FactoryGirl,像許多紅寶石的寶石,定義了用於簡化配置爲目的的「領域特定語言」或DSL。這是一種常見的模式。

你舉的例子是這樣的:

FactoryGirl.define do 
    factory :model do 
    ... 
    end 
    ... 
end 

發生了什麼事是factory方法被調用的參數:model這是另外通過一個塊。與往常一樣,所討論的方法可以自由決定如何處理該塊。在這種情況下,它會在工廠生成過程中保存並執行。

您對它的重新解釋沒有任何意義,因爲這不是有效的Ruby。您不能將符號作爲參數說明符。請記住,factory是一種預先存在的方法,而不是您在此處定義的方法。

如果這一切都有點朦朧,您需要更多地嘗試塊以瞭解它們在Ruby中的工作方式。它們用於很多事情,所以你需要了解每個方法如何設置對塊的能力的期望,它應該返回的內容以及它將被調用的次數(如果有的話)。

+0

感謝您的解釋。我將研究爲FactoryGirl定義的DSL。再次感謝 !! – athap

1

在ruby中,任何與do end都是塊,並且所有塊都附加到方法。

所以在你的例子中,FactoryGirl.define是一個以塊爲參數的方法調用。 factory :model也有塊作爲參數的方法調用,但在這種情況下,:model也傳入參數

你能想到的方法FactoryGirl 被定義概念這樣的:

class FactoryGirl 
    def self.define 
    yield # do something w/ the block passed in 
    ... 
    end 

    def factory(model_name, &block) 
    block.call # do something w/ the block passed in 
    ... 
    end 
end 
相關問題