FactoryGirl rspec,同时创建多个工厂

时间:2015-01-20 06:32:42

标签: ruby-on-rails ruby rspec

当我使用方法create_list创建Factory的多个对象时,orderwhere方法无效,因为create_list创建了工厂对象数组

users = FactoryGirl.create_list(:user, 5)
users.order('name ASC')

它提供undefined method order for Array

那么,我该怎么做才能在ActiveRecord Collection中创建多个工厂对象?

1 个答案:

答案 0 :(得分:1)

orderwhere方法未在Array上定义,而是在ActiveRecord::Relation上定义。它是由ActiveRecord查询接口传递的那种东西。您根本无法在阵列上运行查询。要运行查询,您需要从头开始:

create_list, :user, 5
users = User.where(...).order(name: :asc)

但您也可以直接将您的参数传递给create_list,以便满足条件而无需重新选择用户。当我需要改变每行中的值时,我也经常发现自己明确地编写数组e。克。

users = [
  create(:user, name: 'Alfred'),
  create(:user, name: 'Bob'),
  create(:user, name: 'Charlie'),
  create(:user, name: 'David'),
  create(:user, name: 'Egon')
]

用户已按名称订购,您很高兴。如果在where子句中有某些条件,例如将两个用户分开,则可以直接将这些用户分开。例如,假设我们在users表中有一个admin标志,你想要创建许多用户,有些是管理员而有些则不是。那你就

admins = [
  create(:user, name: 'Alfred', admin: true),
  create(:user, name: 'Charlie', admin: true),
  create(:user, name: 'Egon', admin: true)
]

visitors = [
  create(:user, name: 'Bob'),
  create(:user, name: 'David')
]

根本不需要查询。当然,如果您愿意,也可以使用let语法执行此操作。