ume

rails6 Deviseのconfirmable機能が邪魔してfakerで架空のデータ作成できない

前書き

今ユーザーを登録する際以下の流れで登録できるアプリを作成しています.
①ユーザー情報を仮登録⇨②ユーザーに本人確認のメール送信⇨③本登録

この流れのアプリにfakerでダミーデータを作成しようとした際下記のエラーが出力されたので忘却録として記事に残します。

以下のエラーが出力されました

Running via Spring preloader in process 7647
一部省略
rake aborted!
Errno::EHOSTUNREACH: No route to host - connect(2) for [2404:6800:4008:c06::6c]:587

エラー経緯

まずダミーデータを作成しようとしました。

50.times do
  name = Faker::Name.name
  email = Faker::Internet.unique.free_email
  password = Faker::Internet.password(min_length: 6)

  User.create(
    name: name,
    email: email,
    password: password,
    password_confirmation: password,
  )
end

↓データベースにseedデータ登録実行

rails db:seed

エラー出力といった感じです。

エラーの意味

要はユーザーから確認メールの本人確認をしていないためユーザー登録できないようです。前書きの②の工程をしていないのでエラーが出力されています。

解決策(結論)

⇨下記のコードでデータ登録するとダミーデータ入りました。

50.times do
  name = Faker::Name.name
  email = Faker::Internet.unique.free_email
  password = Faker::Internet.password(min_length: 6)
  

  user = User.new(
                  name: name,
                  email: email,
                  password: password,
                  password_confirmation: password
                  )
                  user.skip_confirmation!
                  user.save!
end

deviseのconfirmableがONだが、例外的に確認メールを飛ばすことなくユーザ登録する方法がありました.

そもそもどういう仕組みでメール送られる?

⇨confirmation.atというカラムがnilだったら確認メールを送るという仕組み出そうです。つまりconfirmation_atに何か値が入っているとメールが送られないみたいです。

そこで↓のメソッドconfirmation_atに値を入れてくれるみたいです。

skip_confirmation!

参考情報

【Rails×devise】例外的にメール確認なしでユーザを登録する