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
语法来实现