当我使用方法create_list
创建Factory的多个对象时,order
和where
方法无效,因为create_list
创建了工厂对象数组
users = FactoryGirl.create_list(:user, 5)
users.order('name ASC')
它提供undefined method order for Array
那么,我该怎么做才能在ActiveRecord Collection中创建多个工厂对象?
答案 0 :(得分:1)
order
和where
方法未在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
语法执行此操作。