概要
numericality
詳細
ActiveRecordで、validation時にnumericalityを利用することで、
数値のみを保持しているかどうかチェックを行うことができます。
オプション一覧
option | 内容 |
---|---|
only_integer | 整数のみ |
greater_than | より大きい |
greater_than_or_equal_to | 以上 |
equal_to | 同じ |
less_than | 未満 |
less_than_or_equal_to | 以下 |
odd | 奇数 |
even | 偶数 |
サンプル
テーブル定義
CREATE TABLE "articles" ( "id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, "title" varchar(255), "text" text, "created_at" datetime, "updated_at" datetime );
Validationその1
class Article < ActiveRecord::Base has_many :comments, dependent: :destroy validates :title, numericality: true validates :text, numericality: { only_integer: true } end
試行その1
rails console(pry)で試行します。
[1] pry(main)> a = Article.new => #<Article id: nil, title: nil, text: nil, created_at: nil, updated_at: nil> [2] pry(main)> a.title = 'text' => "text" [3] pry(main)> a.text = 1.2 => 1.2 [4] pry(main)> a.valid? => false [5] pry(main)> a.errors.messages => {:title=>["is not a number"], :text=>["must be an integer"]} [6] pry(main)> a.text = 2 => 2 [7] pry(main)> a.title = 1.2 => 1.2 [8] pry(main)> a.valid? => true [9] pry(main)> a.errors.messages => {}
Validationその2
class Article < ActiveRecord::Base has_many :comments, dependent: :destroy validates :title, numericality: { greater_than: 10 } validates :text, numericality: { greater_than_or_equal_to: 10 } end
試行その2
rails console(pry)で試行します。
[1] pry(main)> a = Article.new => #<Article id: nil, title: nil, text: nil, created_at: nil, updated_at: nil> [2] pry(main)> a.title = 10 => 10 [3] pry(main)> a.text = 9 => 9 [4] pry(main)> a.valid? => false [5] pry(main)> a.errors.messages => {:title=>["must be greater than 10"], :text=>["must be greater than or equal to 10"]} [6] pry(main)> a.title = 11 => 11 [7] pry(main)> a.text = 10 => 10 [8] pry(main)> a.valid? => true [9] pry(main)> a.errors.messages => {}
Validationその3
class Article < ActiveRecord::Base has_many :comments, dependent: :destroy validates :title, numericality: { less_than: 10 } validates :text, numericality: { less_than_or_equal_to: 10 } end
試行その3
rails console(pry)で試行します。
[1] pry(main)> a = Article.new => #<Article id: nil, title: nil, text: nil, created_at: nil, updated_at: nil> [2] pry(main)> a.title = 10 => 10 [3] pry(main)> a.text = 11 => 11 [4] pry(main)> a.valid? => false [5] pry(main)> a.errors.messages => {:title=>["must be less than 10"], :text=>["must be less than or equal to 10"]} [6] pry(main)> a.title = 9 => 9 [7] pry(main)> a.text = 10 => 10 [8] pry(main)> a.valid? => true [9] pry(main)> a.errors.messages => {}
Validationその4
class Article < ActiveRecord::Base has_many :comments, dependent: :destroy validates :title, numericality: { equal_to: 10 } end
試行その4
rails console(pry)で試行します。
[1] pry(main)> a = Article.new => #<Article id: nil, title: nil, text: nil, created_at: nil, updated_at: nil> [2] pry(main)> a.title = 9 => 9 [3] pry(main)> a.valid? => false [4] pry(main)> a.errors.messages => {:title=>["must be equal to 10"]} [5] pry(main)> a.title = 10 => 10 [6] pry(main)> a.valid? => true [7] pry(main)> a.errors.messages => {}
Validationその5
class Article < ActiveRecord::Base has_many :comments, dependent: :destroy validates :title, numericality: {odd: true} validates :text, numericality: {even: true} end
試行その5
rails console(pry)で試行します。
[1] pry(main)> a = Article.new => #<Article id: nil, title: nil, text: nil, created_at: nil, updated_at: nil> [2] pry(main)> a.title = 2 => 2 [3] pry(main)> a.text = 1 => 1 [4] pry(main)> a.valid? => false [5] pry(main)> a.errors.messages => {:title=>["must be odd"], :text=>["must be even"]} [6] pry(main)> a.title = 1 => 1 [7] pry(main)> a.text = 2 => 2 [8] pry(main)> a.valid? => true [9] pry(main)> a.errors.messages => {}