如何在FactoryGirl中访问传入的参数哈希

时间:2012-02-05 23:15:26

标签: ruby-on-rails-3 factory-bot

我正在使用Rails中的Web后端。我的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 个答案:

答案 0 :(得分: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 

请注意,不会在文章本身上设置被忽略的属性,尽管看起来这就是您在这种情况下所需的行为。