yamotonalds's blog

Webアプリケーション開発における技術メモが中心です。たまにWebサービス、興味を持ったデバイス、自作PCに関する話題もあるかも。Amazon好きなのでAmazon.co.jpアソシエイト使ってます。

deviseで確認メール無しでユーザーを作成する

deviseを使っていて :confirmable にしているとユーザー作成時に確認メールが飛ぶ。

一般ユーザーが新規登録画面から登録する場合はいいんだけど、管理者等が管理画面なりコマンドなりでユーザーを作成するときには確認メールは飛んでほしくない。

調べてみると次のようなページが見つかった。

 

http://stackoverflow.com/questions/7465467/devise-create-user-account-with-confirmed-without-sending-out-an-email#answer-7465664

http://rubydoc.info/github/plataformatec/devise/master/Devise/Models/Confirmable#skip_confirmation%21-instance_method

 

方法1: skip_confirmation!を使う

user = User.new(params[:user])
user.skip_confirmation!
user.save!

 ドキュメントに書いてあるしどうやらこれが正しい方法みたい。

方法2: confirmed_atに値を入れる

User.create(
  :email => 'hoge@example.com', 
  :password => 'p@ssw0rd', 
  :confirmed_at => DateTime.now
)

 この方法はドキュメントに書いてあるかどうか不明。

あとアクセサ用意してないと「Can't mass-assign 〜」で怒られる。

アクセサ忘れてProduction環境で実行するとconfirmed_atは無視されるのでメールが送信されてしまう罠もある(不注意なだけ)。

 

1行で書けないのは面倒な気もするけど方法1が無難かな。