

下記のような正規表現によるバリデーションを実装しました。

[code]

    class User < ApplicationRecord
      validates :email, format: { with: /\A[\w+\-.]+@[a-z\d\-]+(\.[a-z\d\-]+)*\.[a-z]+\z/i }
    end
    
[/code]

この正規表現を、他のモデルやコントローラ等どこでも使い回せるように別ファイルに切り出したいです。（使用する正規表現をまとめたファイルを作りたい）

調べてみるとバリデーションはrailsが起動したときに１回だけ初期化するようだったので、config/initiaizersを利用しようと思いました。具体的には下記です。

config/initializers/common_regexp.rbにモジュールを定義。

[code]

    module CommonRegexp
      module_function
    
      # わざわざメソッドにしているのは、引数を受け取り
      # 動的に正規表現を変えることも検討しているため。
      def format_email
        /\A[\w+\-.]+@[a-z\d\-]+(\.[a-z\d\-]+)*\.[a-z]+\z/i
      end
    
      # 以下他の正規表現もまとめる
    end
    
[/code]

.

[code]

    class User < ApplicationRecord
      validates :email, format: { with: CommonRegexp::format_email }
    end
    
[/code]

これで一応動いたのですが、正規表現をまとめるためにconfig/initializersを使用するのは用途が間違っているような気がします。

こういった場合、どのように実装するのがベストですか？


CC BY-SA 4.0
2019-01-16T00:21:55.883
51998
2019-01-16T05:42:03.837
2019-01-16T05:42:03.837
question
ruby-on-rails
バリデーション用の正規表現を別ファイルにまとめたい