Help us understand the problem. What is going on with this article?

【Ruby on Rails】リンクパスの指定方法について【プログラミング学習91日目】

More than 1 year has passed since last update.

はじめに

  • プログラミング学習を開始して3ヶ月の初学者が、Ruby on Railsチュートリアルに取り組んでいる中で疑問に思った点を言語化し、疑問点を解消、および知識を定着させることを目的とした記事です。
  • 今回はlink_toヘルパー、url_forヘルパー、redirect_toメソッドなどで指定するパス(URL)では様々な記述方法があるものの、それらの使い分け方などについてあまり理解できていないと感じていたため、調査・まとめをすることとしました。

前提条件

  • 今回は例として$ rails g scaffold Entry title:string body:textとした場合を想定しています。
  • ルーティングにはresources :entriesを設定し、$ rails routesでは以下のように示されているとします。
    Prefix    Verb    URI Pattern                   Controller#Action
    entries    GET     /entries(.:format)             entries#index
               POST    /entries(.:format)             entries#create
  new_entry    GET     /entries/new(.:format)         entries#new
 edit_entry    GET     /entries/:id/edit(.:format)    entries#edit
      entry    GET     /entries/:id(.:format)         entries#show
              PATCH    /entries/:id(.:format)         entries#update
               PUT     /entries/:id(.:format)         entries#update
             DELETE    /entries/:id(.:format)         entries#destroy

Railsにおけるリンクパスの指定方法

  • この3ヶ月のRails学習(Progate, ドットインストール, Railsチュートリアル)の過程で出会ったリンクパスの種類は以下3パターンです。
1. URI Pattern
2. Prefix_path
3. Prefix_url
  • これらの違いについて調べた内容を下記します。

1. URI Patternによるパス指定

  • <%= link_to @entries.title, '/entries' %>のような形となります。
  • テスト用の、test ~ do ... end の中ではこの記述方法での指定が必要とのことです。
  • Progateではこの記述法のみ取り扱っていました。
  • Progateから入った私としては、これが最も読みやすく馴染みやすいと感じているのですが、ドットインストールやRailsチュートリアルでは基本的にこの形での記述はしていませんでした。
  • 簡単なヒアリングをした結果、この記述方法は実務ではあまり使われていないようです(違っていたらすみません。)
  • なぜあまり使われていないのかについて理由が分かる方がいらっしゃいましたらご教示いただければ幸いです。
    • 理由についてコメントをいただきました。詳しくは下記コメントをご参照ください。(@scivolaさん、ありがとうございました。)

2. Prefix_pathによるパス指定

  • <%= link_to @entries.title, entries_path %>のような形となります。
  • リソースフルなルーティングを作成すると、利用できるようになるヘルパーです。
  • 例えば、entries_path/entriesを返し、new_entries_path/entries/newを返します。
  • test ~ do ... endの中ではこの記述方法での指定はNGとのことです。
  • 体感ですが、ドットインストールやRailsチュートリアルではこの形が最も使用されていた気がします。

3. Prefix_urlによるパス指定

  • <%= link_to @entries.title, entries_url %>のような形となります。
  • _urlは、_pathの前に現在のホスト名、ポート番号、パスのプレフィックスが追加されている点が異なります。
    • つまり、http://www.example.com/entriesと完全なURLの文字列を返すという意味です。
  • redirect_toでは_urlを使用し、それ以外は_pathを使うとのこと。
    • コメントをいただき、_urlredirect_toのとき限定ではなく、使用する際の本質的な考え方として「https://で始まるフルのURLが必要かどうか」という点が重要となってくるようです。(@scivolaさん、ありがとうございました。)
  • test ~ do ... endの中ではこの記述方法での指定はNGとのことです。

まとめ

  • Railsにおける下記のリンクパスの指定法についてまとめた。
    • 1. URI Pattern
    • 2. Prefix_path
    • 3. Prefix_url
  • それぞれの使い分けは以下の通りであった。
    • test ~ do...end中では1.を使用
    • https://で始まるフルのURLが必要な場面では3.を使用
    • その他の場合は2.を使用

参考URL

(自分のメモ用) 合わせて読んでおきたい関連URL

Why do not you register as a user and use Qiita more conveniently?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away