many关联在FactoryGirl中建立工厂

many关联在FactoryGirl中建立工厂

本文介绍了如何使用has_many关联在FactoryGirl中建立工厂的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

有人可以告诉我是否只是以错误的方式进行设置吗?

Can someone tell me if I'm just going about the setup the wrong way?

我有以下具有has_many.through关联的模型:

I have the following models that have has_many.through associations:

class Listing < ActiveRecord::Base
  attr_accessible ...

  has_many :listing_features
  has_many :features, :through => :listing_features

  validates_presence_of ...
  ...
end


class Feature < ActiveRecord::Base
  attr_accessible ...

  validates_presence_of ...
  validates_uniqueness_of ...

  has_many :listing_features
  has_many :listings, :through => :listing_features
end


class ListingFeature < ActiveRecord::Base
  attr_accessible :feature_id, :listing_id

  belongs_to :feature
  belongs_to :listing
end

我正在使用Rails 3.1.rc4,FactoryGirl 2.0.2,factory_girl_rails 1.1.0和rspec.这是我对:listing工厂的基本rspec rspec完整性检查:

I'm using Rails 3.1.rc4, FactoryGirl 2.0.2, factory_girl_rails 1.1.0, and rspec. Here is my basic rspec rspec sanity check for the :listing factory:

it "creates a valid listing from factory" do
  Factory(:listing).should be_valid
end

这里是Factory(:listing)

Here is Factory(:listing)

FactoryGirl.define do
  factory :listing do
    headline    'headline'
    home_desc   'this is the home description'
    association :user, :factory => :user
    association :layout, :factory => :layout
    association :features, :factory => :feature
  end
end

:listing_feature:feature工厂的设置类似.如果association :features行被注释掉,那么我所有的测试都通过了.
何时

The :listing_feature and :feature factories are similarly setup.
If the association :features line is commented out, then all my tests pass.
When it is

association :features, :factory => :feature

错误消息是我认为undefined method 'each' for #<Feature>对我来说很有意义,因为listing.features返回一个数组.所以我将其更改为

the error message isundefined method 'each' for #<Feature> which I thought made sense to me because because listing.features returns an array. So I changed it to

association :features, [:factory => :feature]

而我现在得到的错误是ArgumentError: Not registered: features以这种方式生成工厂对象是否不明智,还是我缺少了什么?非常感谢您提供的所有信息!

and the error I get now is ArgumentError: Not registered: features Is it just not sensible to be generating factory objects this way, or what am I missing? Thanks very much for any and all input!

推荐答案

创建此类关联需要使用FactoryGirl的回调.

Creating these kinds of associations requires using FactoryGirl's callbacks.

可以在此处找到一组完美的示例.

A perfect set of examples can be found here.

https://thoughtbot.com/blog/aint-no-calla-后女

将其带到您的示例中.

Factory.define :listing_with_features, :parent => :listing do |listing|
  listing.after_create { |l| Factory(:feature, :listing => l)  }
  #or some for loop to generate X features
end

这篇关于如何使用has_many关联在FactoryGirl中建立工厂的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

09-03 09:42