カテゴリー:
Rails
タグ:
 Rails validation validator

このエントリーをはてなブックマークに追加
更新日時:
2013年10月08日(火)
作成日時:
2013年10月08日(火)

前の記事 / 次の記事

カスタムバリデーターをつくったのでメモ。

本体

class ReadonlyValidator < ActiveModel::EachValidator
  def validate_each(record, attribute, value)
    return unless record.send "#{attribute}_changed?"

    # :readonly は別途ロケールに定義が必要
    record.errors.add attribute, options[:message] || :readonly

    # 強制的に変更前の値に戻す
    # record.send "#{attribute}=", record.send("#{attribute}_was")
  end
end

ロケール

ja:
  errors:
    readonly: を編集することはできません。

モデルで

class Gentleman < ActiveRecord::Base
  validates :wife,
    readonly: { on: :update }
end

とか。