8

Factory Girl 文档提供了这种用于创建(我猜)父子关联的语法......

  Factory.define :post do |p|
    p.author {|a| a.association(:user) }
  end

帖子属于用户(其“作者”)。

如果你想定义一个 Factory 来创建User有一堆Posts 的 s 怎么办?

或者如果是多对多的情况(例如,请参阅下面的更新)怎么办?


更新

我以为我已经想通了。我试过这个...

Factory.define(:user) do |f|
  f.username { Factory.next(:username) }

  # ...

  f.roles { |user|
    [
      Factory(:role),
      Factory(:role, {:name => 'EDIT_STAFF_DATA'})
    ]
  }
end

起初它似乎有效,但后来我收到验证错误,因为 FG 试图用相同的用户名和电子邮件保存用户两次。

所以我回到我原来的问题。如果你有一个多对多的关系,比如说Usersand Roles,你如何定义一个将返回Users一些关联的工厂Roles?请注意,它Roles必须是唯一的,因此我不能让 FGRole在每次创建User.

4

3 回答 3

5

我不确定这是否是最正确的方法,但它确实有效。

Factory.define(:user) do |u|
  u.login 'my_login'
  u.password 'test'
  u.password_confirmation 'test'
  u.roles {|user| [user.association(:admin_role),
                      user.association(:owner_role, :authorizable_type => 'User', :authorizable_id => u.id) ]}
end
于 2009-08-20T20:37:09.623 回答
1

工厂女孩的最新更新允许使用回调块指定关联

于 2009-12-22T03:01:14.117 回答
1

我创建了一个active_factory 插件,它在规范中处理您的情况,如下所示:

models { user - posts(3) }

如果有兴趣,我可能会尝试与 factory_girl 工厂进行集成。

于 2011-04-20T20:43:22.573 回答