社会不適合破壊的お味噌マン

くまのプーさんのような大人になりたいです!

ActiveRecord(検証)

検証

validates フィールド名, 検証用ハッシュオブジェクト 存在:presence 長さ:length

存在してるか

class Post < ActiveRecord::Base
  validation :title, :presence => true
end

#Error
post = Post.new(title: "aaa", body: "validation")


post = Post.new(title: "aaa", body: "validation")

post.valid? 
=>false

p post.errors[:title]
=>["can't be blank"]

p post.errors.full_messages
=>["Title can't be blank"]

p post.errors.messages
=>{:title=>["can't be blank"]}

#Past
post = Post.new(title: "aaa", body: "validation")
true
p post.errors[:title]
=>[ ]

p post.errors.full_messages
=>[ ]

p post.errors.messages
=>{:title=>[ ]}

長さ検証 (length)

#長さが最低5文字の検証

class Post < ActiveRecord::Base
  validation :title, presence: true
  validates :body, length:  { minimum: 5 }
  validates :password, length: { in: 6..20 }#6から20の間
 validates :password, length: { is: 6 } #6と等しい
end

post = Post.new(title: "あああ", body: "va")
p post.valid?
=>false

p post.errors[:body]
=>["is too short (minimum is 3 characters)"]

p post.errors.full_messages
=> ["Body is too short (minimum is 3 characters)"]

p post.errors.messages
=>{:body=>["is too short (minimum is 3 characters)"]}

数値かどうか(numericality)

class Post < ActiveRecord::Base
  validates :age, numericality: true
  validates :age, numericality: { only_integer: true }
  validates :age, numericality: { greater_than: 20 }
  validates :age, numericality: { less_than: 20 }
end
  • :greater_than - 指定された値よりも大きくなければならないことを指定します。

  • :greater_than_or_equal_to - 指定された値と等しいか、それよりも大きくなければならないことを指定します。

  • :equal_to - 指定された値と等しくなければならないことを示します。

  • :less_than - 指定された値よりも小さくなければならないことを指定します。

  • :less_than_or_equal_to - 指定された値と等しいか、それよりも小さくなければならないことを指定します。

  • :odd - trueに設定されている場合は、奇数でなければなりません。

  • :even - trueに設定されている場合は、偶数でなければなりません。

acceptance

format

formatで正規表現に合う文字列以外にエラーを出す
{with: 正規表現}

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

post = Post.new(title: "あああ", body: "validation")
post.save

p post.valid?
=>false
p post.errors[:title]
=>["英文字のみが使用できます"]

uniqueness 一意性の確保のためDBにすでに存在しているとエラーメッセージを出す。

class Post < ActiveRecord::Base
  validates :title, uniqueness: true
  validates :body, length: {minimum: 3}
end

post = Post.new(title: "Hahaha", body: "validation")
post.save

p post.valid?
=>false
p post.errors[:title]
=>["has already been taken"]

confirmation