名前付きルートを使いこなす
記事を書く理由
名前付きルートはページを指定するときに便利。
しかしヘルパー名が似ており(むしろ同じなので)、使うときに何を使えばいいかサッと出てこない。
そんな小さな悩みですが解決するため一度整理します。
流れとゴール
- 名前付きルートを指定しようとすると毎回混乱するので、まずは混乱ポイントを整理
- _pathヘルパーからアクションを推測できるように覚え方を定義しておく
そもそも名前付きルートとは
「リソースフルなルーティングを作成したときに使えるようになるヘルパーのこと」です
resources :users の例
routes.rbでresources :users
を定義すると使えるようになるヘルパー
混乱ポイント
- 同じヘルパー名が存在する
users_path や user_path(:id)
単数形と複数形が存在する
例)
POST
/users
users_path
PATCH
/users/:id
user_path(:id)
DELETE
/users/:id
user_path(:id)
リクエストと合わせて考えれば1人のユーザーを登録したり更新、削除するヘルパーだと推測できるのに、ヘルパー名は単数形と複数形があり混乱する。
解決策
- 特定のユーザーが既に存在するアクションは単数形と覚える
GET
user_path(:id)
→ showアクション
PATCH
user_path(:id)
→ updateアクション
DELETE
user_path(:id)
→ destroyアクション
POST
users_path
はユーザーを新規作成するパス。現時点で特定のユーザーが存在しないので、複数形のusersを使っている。
POST
users_path
→ createアクション
残りは自力で覚える
GET
users_path
→ indexアクション
GET
new_user_path
→ newアクション
GET
edit_user_path(:id)
→ editアクション以上の3つはヘルパー名とリクエストから推測しやすいので自力で覚えましょう。
おまけ)pathヘルパーとurlヘルパーの使い分け
- _pathヘルパーには、対応する_urlヘルパーが存在する
- _urlヘルパーは、_pathの前に現在のホスト名、ポート番号、パスのプレフィックスが追加されている
→ 簡単に言えばurlを指定している
どう使い分ければいいの?
redirect_to
では_urlヘルパーが推奨されてたりするけど、基本どちらを使っても動く。あんまり気にしなくていい。
バリデーションの種類
バリデーションとは
データの内容が正しいかどうかチェックする仕組み。
validationは「検証」、 validは「妥当である」という意味。
バリデーションの種類(オプション)
presence
必須のデータが入っているか?uniqueness
データが一意(複数存在しない)か?length
文字列の長さが適切か?format
正しいフォーマットか?
オプションと引数の組み合わせ
maximum
→ 最大文字数の制限
minimum
→ 最低文字数の制限
length: { maximum: 255 }
case_sensitive: false
→ 大文字と小文字を区別する
uniqueness: { case_sensitive: false }
バリデーションの書き方
検証を行うデータベースに対応するモデル内で行う
validates :カラム名, オプション名: {引数}
複数の検証でも可能
(例)
validates :content, presence: true, length: {maximum: 140}} validates :email, presence: true, uniqueness: { case_sensitive: false}