我正在使用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()?
答案 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
请注意,不会在文章本身上设置被忽略的属性,尽管看起来这就是您在这种情况下所需的行为。