やりたいこと
カラムを更新する時、数値(整数と少数)のみ許可したい。
たとえば、以下のようなUserモデルを作成したとする。
$ rails g model User name:string age:integer height: float
カラム | 型 |
---|---|
id | integer |
name | string |
age | integer |
height | float |
この時、浮動小数点型のheightカラムに不正な数値が入らないようにする。
(例)
カンマが不正 >> 160..1
全角数字 >> 160.3
文字列 >> hoge
実装方法
Userモデルで以下のようにvalidationを記述する。
デフォルトでは、整数と浮動小数点にマッチし、nil値は許容されない。
user.rb
class User < ApplicationRecord
# デフォルト
validates :height, numericality: true
# nil値を許可するオプションをつけた場合
validates :height, numericality: { allow_nil: true }
end
terminal
user = User.new(name: 'hoge', age: 26, height: 162..1)
user.valid?
user.erros.full_message
# => height is not a number
参考
様々なオプションがあるのでRailsガイドを参照する。
Active Record バリデーション - Railsガイド