Rails 4 でカスタムバリデータを作成する方法です。以下のページを参考にしています。
1. app ディレクトリ内に validators というディレクトリを作成します
$ cd <RAILS_ROOT>
$ mkdir app/validators
2. カスタムバリデータを作成し、app/validators ディレクトリに保存します
Ruby on Rails Guides が参考になります。
今回は Email 用のバリデータ(EmailValidator)を作成します。
app/validators/email_validator.rb
class EmailValidator < ActiveModel::EachValidator
def validate_each(record, attribute, value)
unless value =~ /\A([^@\s]+)@((?:[-a-z0-9]+\.)+[a-z]{2,})\z/i
record.errors[attribute] << (options[:message] || "is not an email")
end
end
end
3. カスタムバリデータを有効にするため config/application.rb を修正します
config/application.rb の config.autoload_paths
にカスタムバリデータを置いてあるディレクトリパスを追加すると、カスタムバリデータが必要な時に自動的に読み込まれるようになります。
config/application.rb
# ...
module Core
class Application < Rails::Application
# ...
# add custom validators path
config.autoload_paths += Dir["#{config.root}/app/validators"]
# ...
end
end
4. バリデータを利用したい Model でカスタムバリデータを有効にします
app/models/user.rb
class User < ActiveRecord::Base
# ...
validates :email, email: true # <- カスタムバリデータ(EmailValidator)
# ...
end
validates で email: true
を指定することで、先ほど作成した EmailValidator の validate_each
が呼ばれます。
参考 URL
- Active Record Validations — Ruby on Rails Guides
http://guides.rubyonrails.org/active_record_validations.html#custom-validators - Custom Validators in Ruby on Rails 4 - Rails 4 recipes and know-how for developers
http://www.rails-dev.com/custom-validators-in-ruby-on-rails-4