47
45

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Rails バリデーションのまとめ

Posted at

忘れがちなのでRails バリデーションをまとめました。

##チェックボックスのオン・オフ
acceptance


validates :terms_of_service, acceptance: true

##関連付けされている両方のモデルでバリデーションを実行する
validates_associated


class Library < ApplicationRecord
  has_many :books
  validates_associated :books
end

##2つのテキストフィールドの完全一致
confirmation


class Person < ApplicationRecord
  validates :email, confirmation: true
end

<%= text_field :person, :email %>
<%= text_field :person, :email_confirmation %>

##指定した値が含まれていない
exclusion


validates :subdomain, exclusion: { in: %w(www us ca jp),
    message: "%{value}は予約済みです" }

##指定した値が含まれている
inclusion


  validates :size, inclusion: { in: %w(small medium large),
message: "%{value} のサイズは無効です" }

##正規表現の一致
format


  validates :legacy_code, format: { with: /\A[a-zA-Z]+\z/,
    message: "英文字のみが使用できます" }

##長さ
length


  validates :name, length: { minimum: 2 }
  validates :bio, length: { maximum: 500 }
  validates :password, length: { in: 6..20 }
  validates :registration_number, length: { is: 6 }

##整数か浮動小数が使用されている
numericality


  validates :points, numericality: true

##空でない

presence


validates :name, :login, :email, presence: true

##boolean属性で空でない
inclusion: { in: [true, false] }


validates :boolean_field_name, inclusion: { in: [true, false] }

##値が重複しない
uniqueness


  validates :email, uniqueness: true

##バリデーションが実行される条件を指定する
:if


 validates :card_number, presence: true, if: :paid_with_card?

##バリデーションが実行される条件を指定してまとめて実行する
with_options


  with_options if: :is_admin? do |admin|
    admin.validates :password, length: { minimum: 10 }
    admin.validates :email, presence: true

##バリデーションのタイミング
バリデーションはnewやsaveで保存された時に実行されるので、
newでインスタンス化されたオブジェクトではエラーは報告されない

##バリデーションが通るか手動で確認
valid? invalid

Person.create(name: "John Doe").valid? # => true
Person.create(name: nil).valid? # => false

##エラーメッセージの配列を取得する
errors.messages

person = Person.new
person.valid? # => false
person.errors.messages
# {:name=>["空欄にはできません", "短すぎます (最小3文字)"]}

##エラーの属性名を最初に追加して、見やすい形でエラーメッセージを表示する
errors.full_messages(errors.to_a)

person.errors[:name]
# => ["は以下の文字を含むことができません !@#%*()_-+="]
 
person.errors.full_messages
# => ["Name は以下の文字を含むことができません !@#%*()_-+="]

##オブジェクトの状態全体に関連するエラーメッセージを追加する
errors[:base]

 errors[:base] << "この人物は以下の理由で無効です..."

参照

Active Record バリデーション

47
45
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
47
45

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?