2012-02-05 5 views
0

Я работаю над веб-сервером в Rails. Моя модель Article в значительной степени является оберткой, которая делегирует большинство методов последним ArticleVersion. Однако при написании фабрик FactoryGirl я пытался создать фабрику article_with_version, которая генерирует Article и дает ему версию, но я не уверен, как перенаправить параметры с фабрики Article на ArticleVersion.Как получить доступ к параметрам hash in 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 

Сразу отметим, что атрибуты игнорируются не будут установлены на самой статье, хотя, похоже, что это поведение, которое вы хотите в этом случае ,

Смежные вопросы