Posted at

【Rails】validation(バリデーション)のバリエーション


はじめに

Railsに関しては初投稿。まだまだprogateで学んでいるだけですが、書籍やRailsチュートリアルにも挑戦していきたいと思っております。タイトルにあるようにバリデーションのバリエーションを忘れないように残しておこうと思ったので、書きます。ただその前に、コントローラーとかビューとかルーティングとか、何かに例えないと理解が難しかったので勝手な解釈を共有します。


【view,controller,routingの勝手なイメージ 〜物流に例えると〜】

送信されたURL: 出荷指示(ロケーション指定される)。

view: 棚の商品。

controller: ピッカーの人々。

アクション: ピッキングリストを持ったピッカー1人1人のピッキング。

routing: 商品オーダーによってピッカーに指示を出す現場のリーダー。どのオーダーに対してどのピッカーにピッキングさせればいいか熟知している。

〜空想short story〜

routing(現場リーダー): 「出荷指示が入った。田中さんピッキング頼みます!」

controller(ピッカー)の1人である田中さん: 「分かりましたあー」

※この田中さんのピッキングがアクションである。

そして無事にピッキング完了し商品(view)が出荷された。


バリデーションのバリエーション


バリデーションの書き方


models/post.rb

class モデル名 < ApplicationRecord

validates :検証するカラム名, {検証する内容}
end


空の投稿を防ぐ


models/post.rb

class Post < ApplicationRecord

validates :content, {presence: true}
end


文字数を制限する(最大文字数を140文字に)


models/post.rb

class Post < ApplicationRecord

validates :content, {length: {maximum: 140}}
end


値の重複がないかのチェック


models/user.rb

class User < ApplicationRecord

validates :email, {uniqueness: true}
end


同じカラム名に対して複数のバリデーションを指定する場合

コンマ( , )で区切ることで、複数指定可能。


models/post.rb

class Post < ApplicationRecord

validates :content, {presence: true, length: {maximum: 140}}
end


参考

progate Ruby on Rails5