複数のドメインを許可するemail属性のバリデーションを設定する

井原(@ihara2525)です。

サービスへのログイン時に、メールアドレスがexample.comgmail.comなユーザなら許可する、みたいなことを、以下のように実装してみました。

ENV['USER_DOMAIN']には'example.com gmail.com'みたいにスペースで区切ったドメインの文字列が入っているとして、

app/models/user.rb

class User < ActiveRecord::Base
  VALID_EMAIL_REGEXP = /\A(.+)@#{Regexp.union(ENV['USER_DOMAIN'].split)}\z/

  validates :email, format: { with: VALID_EMAIL_REGEXP }
end

こんな感じですか。

Regexp.unionが渡された配列を|で連結してくれるのがありがたいですね〜。