Railsの代表的なモデルバリデーションをまとめました。
目次
空でないことを確認する
validates :title, presence: true
文字数上限を指定する
validates :title, length: { maximum: 255 }
空であることを許容する
validates :title, length: { maximum: 255 }, allow_blank: true
数値(少数含む)のみ許可する
validates :title, numericality: true
数値(少数を許容しない)のみ許可する
validates :title, numericality: { only_integer: true }
特定のフォーマットであることを検証(正規表現)
validates :title, format: { with: 正規表現 }
同じデータが一つ(一意)であることを検証する
validates :title, uniqueness: true
大文字/小文字の区別を無しとする場合
validates :title, uniqueness: { case_sensitive: false }
数値のみであることを検証する
validates :price, numericaliity: { greater_than_or_equal_to: 0 }
価格登録カラムなどで、マイナスの数値が入れられることの無い様に設定できる。
上記の例だと、0円以上のバリデーションがかかっている。
参考記事
![](https://qiita-user-contents.imgix.net/https%3A%2F%2Fcdn.qiita.com%2Fassets%2Fpublic%2Farticle-ogp-background-412672c5f0600ab9a64263b751f1bc81.png?ixlib=rb-4.0.0&w=1200&mark64=aHR0cHM6Ly9xaWl0YS11c2VyLWNvbnRlbnRzLmltZ2l4Lm5ldC9-dGV4dD9peGxpYj1yYi00LjAuMCZ3PTk3MiZoPTM3OCZ0eHQ9JUUzJTgwJTkwUmFpbHMlRTMlODAlOTFudW1lcmljYWxpdHklRTMlODIlOTIlRTQlQkQlQkYlRTMlODElQTMlRTMlODElQTYlRTUlQjElOUUlRTYlODAlQTclRTMlODElQUIlRTYlOTUlQjAlRTUlODAlQTQlRTMlODElQUUlRTMlODElQkYlRTMlODElOEMlRTQlQkQlQkYlRTMlODIlOEYlRTMlODIlOEMlRTMlODElQTYlRTMlODElODQlRTMlODIlOEIlRTQlQkElOEIlRTMlODIlOTIlRTYlQTQlOUMlRTglQTglQkMlRTMlODElOTklRTMlODIlOEImdHh0LWFsaWduPWxlZnQlMkN0b3AmdHh0LWNvbG9yPSUyMzIxMjEyMSZ0eHQtZm9udD1IaXJhZ2lubyUyMFNhbnMlMjBXNiZ0eHQtc2l6ZT01NiZzPWY3ZWI2N2YwZDM3YmI4MWEzOWU3Nzk1YTQzMGIzZTFk&mark-x=142&mark-y=57&blend64=aHR0cHM6Ly9xaWl0YS11c2VyLWNvbnRlbnRzLmltZ2l4Lm5ldC9-dGV4dD9peGxpYj1yYi00LjAuMCZoPTc2Jnc9NzcwJnR4dD0lNDBzdXp5MTAzMSZ0eHQtY29sb3I9JTIzMjEyMTIxJnR4dC1mb250PUhpcmFnaW5vJTIwU2FucyUyMFc2JnR4dC1zaXplPTM2JnR4dC1hbGlnbj1sZWZ0JTJDdG9wJnM9ZTBiZWQzNmNmZjUzM2E4ZGY5NDg3NWY4MWU2Y2MzODE&blend-x=142&blend-y=486&blend-mode=normal&s=89542dc1a6bc1bf2e3cd3e1638df3503)
【Rails】numericalityを使って属性に数値のみが使われている事を検証する - Qiita
こんばんは!validationのnumericalityヘルパーの備忘録DBに保存されちゃう<%= form_for @post do |f| %> <%= f.label :price %…
独自バリデーション
bookの名前にexerciseが含まれる場合、エラーを表示する。
class Book < ApplicationRecord
省略
validate do |book|
if book.name.include?("exercise")
book.errors[:name] << "I don't like exercise"
end
end
end
コメント