2012年10月17日水曜日

カスタムバリデーションの作り方

Rails3でカスタムバリデーションを作ってみました。
Rails2ですら作ったことなかったのですが、思ったより簡単でした。

config定義
バリデーションクラスを置く場所を定義します。
# config/application.rb
config.autoload_paths += %W(#{config.root}/lib/validators)

バリデーションクラス
options[:message]がバリデーションチェック対象の項目名。
今回はリポジトリ名(name)になりますが、
「リポジトリ名は存在しません。」というようなエラーになります。
# lib/validators/repo_presence_validator.rb
class RepoPresenceValidator < ActiveModel::EachValidator
  def validate_each(object, attribute, value)
    unless mail_groups(value)
      object.errors[attribute] << (options[:message] || "は存在しません")
    end
  end

private
  def mail_groups(value)
   ...
  end
end

モデル
青字部分が今回作ったバリデーションを呼んでる所になります。
validates :name, :presence => true, :repo_presence => true
<参考>
http://railscasts.com/episodes/211-validations-in-rails-3
http://hajimete-ruby.jugem.jp/?eid=69

0 件のコメント:

コメントを投稿

注: コメントを投稿できるのは、このブログのメンバーだけです。