Как получить доступ к хэшу переданных параметров в FactoryGirl - PullRequest
0 голосов
/ 06 февраля 2012

Я работаю над веб-сервером в Rails.Моя Article модель в основном является оболочкой, которая делегирует большинство методов самой последней ArticleVersion.При написании фабрик FactoryGirl я пытался создать фабрику: article_with_version, которая генерирует Article и дает ей версию, но я не уверен, как перенаправить параметры с фабрики Article на ArticleVersion.

Вот соответствующий код:

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 передать эти параметры: title и: contents нановый ArticleVersion (или ноль, если таковые опущены).Есть ли способ получить доступ к тому хэшу динамических параметров, которые передаются во время Factory.create ()?

1 Ответ

2 голосов
/ 14 марта 2012

Вы можете сделать это, используя переходные атрибуты, такие как:

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 

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

...