Railsのモデル側でのvalidation
Railsのモデルファイルでのvalidationの方法です。
validateの対象を指定
validateを行うパラメータをvalidatesを使って宣言する
class TestValidates < ActiveRecord::Base validates :param1 validates :param2 validates :param3 ・ ・ ・ end
validateの条件の設定
存在チェック
class TestValidates < ActiveRecord::Base validates :param1, presence: true ・ ・ ・ end
検証をスキップする場合
値が送られた場合のみvalidationを行いたい場合などは、以下を使う
class TestValidates < ActiveRecord::Base validates :param1, allow_nil: true # nilの検証をスキップする validates :param2, allow_brank: true # 空の検証をスキップする ・ ・ ・ end
lengthチェック
class TestValidates < ActiveRecord::Base validates :param1, :length => { :is => 1 } # 文字の長さが1byte validates :param2, :length => { :minimum => 5, :maximum => 10 } # 文字の長さが5byte以上、10byte以下じ) validates :param3, :length => { :in => 5..10 } # 上記と同じ ・ ・ ・ end
数値チェック
class TestValidates < ActiveRecord::Base validates :param1, :numericality => { :only_interger => true } # 数字のみで構成されているか validates :param2, :numericality => { :greater_than => 5 } # 数字が5より大きいか validates :param3, :numericality => { :greater_than_or_equal_to => 5 } # 数字が5以上であるか validates :param4, :numericality => { :less_than => 5 } # 数字が5より小さいか validates :param5, :numericality => { :less_than_or_equal_to => 5 } # 数字が5以下であるか validates :param6, :numericality => { :equal_to => 5 } # 数字が5と等しいか validates :param5, :numericality => { :odd => true } # 数字が奇数か validates :param6, :numericality => { :even => true } # 数字が偶数か ・ ・ ・ end
エラーメッセージの設定
- validationに失敗した際のエラーメッセージを設定します
- 条件毎に異なるメッセージを設定することも出来ます
class TestValidates < ActiveRecord::Base validates :param1, :length => { :is => 1, :message => '入力された文字が1byteではありません' } validates :param2, :numericality => { :greater_than_or_equal_to => 5, :less_than_or_equal_to => 10, :message => '入力値が5~10の範囲外です' } validates :param3, :length => { :is => 5, :message => '入力値が1byteより大きいです' }, :numericality => { :odd => true, :message => '入力値が奇数ではありません' } ・ ・ ・ end
validationの利用
- controllerファイルなどで以下のように記述すれば使用可能
initialize処理が必要ない場合
${モデル名}.new(${key} => ${value})
- 例
TestValidates.new(param1 => 'hogehoge')
initialize処理が必要な場合
- modelファイルのinitializeに以下のように書き足し、上記と同じくnewで呼び出せばよい
class TestValidates < ActiveRecord::Base ・ ・ ・ def initialize(params = nil) super(params) ${追加したい処理} end end
validationの結果の利用
${変数} = ${モデル名}.new(${key} => ${value}) ${変数}.valid? # validationをpassした場合はtrue、失敗した場合はfalseを返す ${変数}.invalid? #上記の逆
- 例
test = TestValidates.new(param1 => 'hogehoge') test.valid? # true test.invalid? # false