2012-02-05 23 views
0

我正在使用Rails中的Web後端工作。我的Article模型在很大程度上是一個包裝,它將大多數方法委託給最近的ArticleVersion。不過,在編寫FactoryGirl工廠時,我試圖創建一個:article_with_version工廠,該工廠生成一個Article並給它一個版本,但我不知道如何將參數從Article工廠轉移到ArticleVersion如何訪問FactoryGirl中的傳入參數哈希值

下面是相關代碼:

class Article < ActiveRecord::Base 
    has_many :versions, :class_name => "ArticleVersion" 

    def title 
    self.versions.last.title 
    end # method title 

    def contents 
    self.versions.last.contents 
    end # method contents 
end # model Article 

FactoryGirl.define do 
    factory :article_version do; end 

    factory :article do; end 

    factory :article_with_version, :parent => :article do 
    after_create do |article| 
     article.versions << Factory(:article_version, :article_id => article.id) 
    end # after_create 
    end # factory :article_with_version 
end # FactoryGirl.define 

我想做什麼就能做的是叫Factory(:article_with_version, :title => "The Grid", :contents => "<h1>Greetings, programs!</h1>"),並有FactoryGirl傳遞這些:標題和:內容參數到新ArticleVersion(或零,如果這些被省略)。有沒有辦法訪問在Factory.create()期間傳遞的動態參數的散列?

回答

2

可以使用臨時屬性是這樣做的:

factory :article_with_version, :parent => :article do 
    ignore do 
    title nil 
    contents nil 
    end 

    after_create do |article, evaluator| 
    article.versions = [FactoryGirl.create(:article_version, title: evaluator.title, contents: evaluator.contents)] 
    article.save! 
    end 
end 

只是注意,被忽略的屬性不會在文章本身設置,雖然它看起來像那是你在這種情況下,想要的行爲。