sequence(シーケンス)とは
tasks.rb
FactoryBot.define do
factory :task do
sequence(:title, "title_1") #ここ
content { "content" }
status { :todo }
deadline { 1.week.from_now }
association :user
end
end
:task do
内の1行目にある
**sequence(:title, "title_1")
**このsequence
にあたる。
コンソール.
'title_1'.next
=> "title_2"
'title_7'.next
=> "title_8"
title_1
に.next
をつけてコンソールで確認してみると、次の数字が含んだtitle_2
となった。
sequenceの単語の意味は「順番・順序」となるので、.next
で次の数字が表示される意味となったのかも。
.nextはruby自体の機能で、末尾の数値を増やす機能がある
ただしこれを日本語でやろうとすると、
コンソール.
'タスク_1'.next
=> "タスク_2"
'タスク_9'.next
=> "タスグ_0"
9
の次が0
になっていたり、タスグ
となっていたりして正しく表示されていない。
英字 + 記号 + 数字が発動条件のよう。
他にも
コンソール.
sequence(:reserve_on, Date.today)
# 今日、明日、明後日、という感じで順に生成される
sequence(:color, %w[red green blue].cycle)
# cycleを使うと、red green blue がこの順番で繰り返される
cycle
は本番環境では上手くいかないので注意。
user.rb
sequence(:email) { |n| "user_#{n}@example.com" }
user1 = FactoryBot.create(:user)
# 結果→ example1@example.com
user2 = FactoryBot.create(:user)
# 結果→ example2@example.com
このファクトリが呼び出されるたびに、n
の部分に数字が一つずつ増えて入るため、一意性が保たれる。