在使用工廠女孩的寶石,我們創建一個語法factories.rb文件Rails的FactoryGirl定義語法
FactoryGirl.define do
factory :model do
...
end
...
end
那麼究竟是什麼FactoryGirl.define語法手段? 它是類似於
class FactoryGirl
def factory :model do
end
end
感謝
在使用工廠女孩的寶石,我們創建一個語法factories.rb文件Rails的FactoryGirl定義語法
FactoryGirl.define do
factory :model do
...
end
...
end
那麼究竟是什麼FactoryGirl.define語法手段? 它是類似於
class FactoryGirl
def factory :model do
end
end
感謝
FactoryGirl,像許多紅寶石的寶石,定義了用於簡化配置爲目的的「領域特定語言」或DSL。這是一種常見的模式。
你舉的例子是這樣的:
FactoryGirl.define do
factory :model do
...
end
...
end
發生了什麼事是factory
方法被調用的參數:model
這是另外通過一個塊。與往常一樣,所討論的方法可以自由決定如何處理該塊。在這種情況下,它會在工廠生成過程中保存並執行。
您對它的重新解釋沒有任何意義,因爲這不是有效的Ruby。您不能將符號作爲參數說明符。請記住,factory
是一種預先存在的方法,而不是您在此處定義的方法。
如果這一切都有點朦朧,您需要更多地嘗試塊以瞭解它們在Ruby中的工作方式。它們用於很多事情,所以你需要了解每個方法如何設置對塊的能力的期望,它應該返回的內容以及它將被調用的次數(如果有的話)。
在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
感謝您的解釋。我將研究爲FactoryGirl定義的DSL。再次感謝 !! – athap