名前付きルートを使いこなす

記事を書く理由

名前付きルートはページを指定するときに便利。
しかしヘルパー名が似ており(むしろ同じなので)、使うときに何を使えばいいかサッと出てこない
そんな小さな悩みですが解決するため一度整理します。

流れとゴール

  • 名前付きルートを指定しようとすると毎回混乱するので、まずは混乱ポイントを整理
  • _pathヘルパーからアクションを推測できるように覚え方を定義しておく

そもそも名前付きルートとは

「リソースフルなルーティングを作成したときに使えるようになるヘルパーのこと」です

resources :users の例

routes.rbでresources :usersを定義すると使えるようになるヘルパー

f:id:Barry12113920:20201021230317p:plain
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}

参考