Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails FactoryGirl rspec,同时创建多个工厂_Ruby On Rails_Ruby_Rspec - Fatal编程技术网

Ruby on rails FactoryGirl rspec,同时创建多个工厂

Ruby on rails FactoryGirl rspec,同时创建多个工厂,ruby-on-rails,ruby,rspec,Ruby On Rails,Ruby,Rspec,当我使用方法create_list创建工厂的多个对象时,order和where方法对其不起作用,因为create_list创建工厂对象数组 users = FactoryGirl.create_list(:user, 5) users.order('name ASC') 它为数组提供了未定义的方法顺序 那么,我应该如何在ActiveRecord集合中创建多个factory对象呢?在Array上没有定义order和where方法,而是在ActiveRecord::Relation上定义。这是Ac

当我使用方法
create_list
创建工厂的多个对象时,
order
where
方法对其不起作用,因为
create_list
创建工厂对象数组

users = FactoryGirl.create_list(:user, 5)
users.order('name ASC')
它为数组提供了
未定义的方法顺序


那么,我应该如何在ActiveRecord集合中创建多个factory对象呢?

Array
上没有定义
order
where
方法,而是在
ActiveRecord::Relation
上定义。这是ActiveRecord查询接口传递的内容。您无法在数组上运行查询。要运行查询,您需要从头开始:

create_list, :user, 5
users = User.where(...).order(name: :asc)
但您也可以直接将参数传递给create_list,这样就可以满足条件,而无需重新选择用户。我还经常发现自己在需要更改每行中的值时显式地编写数组。g

users = [
  create(:user, name: 'Alfred'),
  create(:user, name: 'Bob'),
  create(:user, name: 'Charlie'),
  create(:user, name: 'David'),
  create(:user, name: 'Egon')
]
用户已经按名称排序,您可以继续了。如果where子句中有一些条件,例如将用户分成两个组,那么可以直接将这些用户分开。例如,假设在用户表中有一个
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
语法来实现