Ruby on rails 具有FactoryGirl序列的自定义范围

Ruby on rails 具有FactoryGirl序列的自定义范围,ruby-on-rails,factory-bot,Ruby On Rails,Factory Bot,在旧版本中,类似这样的事情是可能的(): 在新的FactoryGirl版本中使用此选项将为0..10:Range创建一个NoMethodError:undefined方法“next” 特别是我有一个模型用户,它有多个时间项。我想创建默认值。为了简单起见,每个用户都应该创建n时间条目。创建的条目如下所示: FactoryGirl.define do factory :time_entry do start_time { generate(:time_entry_begin) }

在旧版本中,类似这样的事情是可能的():

在新的FactoryGirl版本中使用此选项将为0..10:Range创建一个
NoMethodError:undefined方法“next”

特别是我有一个模型
用户
,它有多个
时间项
。我想创建默认值。为了简单起见,每个用户都应该创建
n
时间条目。创建的条目如下所示:

FactoryGirl.define do
  factory :time_entry do
    start_time { generate(:time_entry_begin) }
    end_time { generate(:time_entry_end) }
  end
end

FactoryGirl.define do
  sequence(:time_entry_begin, 0..10) do |n|
    DateTime.now - n.hours
  end
end

FactoryGirl.define do 
  sequence(:time_entry_end, 0..10) do |n|
    DateTime.now - n.hours + (1 + n).minutes
  end
end

您必须传递一个响应
next
的对象,例如枚举器:

FactoryGirl.define do
  factory :user do
    sequence(:email, (50..60).cycle) { |n| "user_#{n}@example.com" }
  end
end

FactoryGirl.build(:user) #=> <#User @email="user_50@example.com">
FactoryGirl.build(:user) #=> <#User @email="user_51@example.com">
FactoryGirl.build(:user) #=> <#User @email="user_52@example.com">
# ...
FactoryGirl.build(:user) #=> <#User @email="user_59@example.com">
FactoryGirl.build(:user) #=> <#User @email="user_60@example.com">
# `cycle` will start over:
FactoryGirl.build(:user) #=> <#User @email="user_50@example.com">
FactoryGirl.define do
工厂:用户做什么
顺序(:email,(50..60).cycle){n|“user|n}@example.com”}
结束
结束
FactoryGirl.build(:user)#=>
FactoryGirl.build(:user)#=>
FactoryGirl.build(:user)#=>
# ...
FactoryGirl.build(:user)#=>
FactoryGirl.build(:user)#=>
#“循环”将重新开始:
FactoryGirl.build(:user)#=>
FactoryGirl.define do
  factory :user do
    sequence(:email, (50..60).cycle) { |n| "user_#{n}@example.com" }
  end
end

FactoryGirl.build(:user) #=> <#User @email="user_50@example.com">
FactoryGirl.build(:user) #=> <#User @email="user_51@example.com">
FactoryGirl.build(:user) #=> <#User @email="user_52@example.com">
# ...
FactoryGirl.build(:user) #=> <#User @email="user_59@example.com">
FactoryGirl.build(:user) #=> <#User @email="user_60@example.com">
# `cycle` will start over:
FactoryGirl.build(:user) #=> <#User @email="user_50@example.com">