パスとURLヘルパーメソッド
ルーティングを表示する際のPrefixの値+_pathなどとするとルーティングで定義したパスが取得可能になります。
以下例になります。
次のようなルーティングを表示した場合のprefix欄にあたる
publisherやedit_profileの名前を使ってURLやパスを生成できます。
Prefix Verd URI Pattern Controller#Action
publisher GET /publishers/:id(.:format) publisher#show
edit_profile GET /profile/edit(.:format) profiles#edit
上記のPrefix値に_pathを付けると
ドメインやポートなどを除いた/から始まるパス部分を、
_urlとするとドメインなどを含んだ安全なURLを返します。
また、publsiherのようなパスの情報に「:id」といった変動する値がある場合は、引数にハッシュ形式で値を指定します。
コントローラーやビュー上では「edit_profile_url」などとするとURLを取得できます。
コンソール上で試してみたい場合にはappオブジェクトを使用することで確認することができます。
irb(main):001:0>app.edit_profile_url
=> "https://example.com/profile/edit"
irb(main):002:0>app.edit_profile_path
=> "/profile/edit"
ヘルパーメソッドを活用する事例
url_for
url_forはWebアプリケーションのパスを構築するためのヘルパーメソッドになります。
文字列を書かずにルーティング上の定義を活用できます。
url_for(edit_profile_path)
=> /profile/edit
以下のようにコントローラとアクション名を指定したパラメーターから適切なパスを選択して出力することも可能です。
url_for(controller: :profiles, action: :edit)
=> /profile/edit
また、contorllerなどの特定のオプション以外の
パラメーターを追加することでクエリパラメーターを付与できます。
link_to
link_toはaタグを生成するヘルパーメソッド
url_forと同じよう_pathや_urlを利用してタグを生成できます。
link_to("リンクはこちら", edit_profile_path)
=> <a href="/profile/edit">リンクはこちら</a>
controllerを直接指定する場合
link_to("リンクはこちら", controller: :profiles, action: :edit)
=> <a href="/profile/edit">リンクはこちら</a>
form_with
フォームを構築するためのヘルパーメソッドになります。
使用するとモデルの情報をもとに送信URLや、対応するフィールドの内容を埋めたり、エラーを表示したりすることができます。
<%= form_with(model: book, local: true) do |form| %>
<処理内容>
<% end %>
time_ago_in_words
ある時刻と現在の時刻にどの程度で開きがあるのかをわかりやすく表示するヘルパーメソッドになります。
こちらはコンソールでも動作を確認することでできます。その時はhelperオブジェクト経由でメソッドを呼び出す必要があります。
irb(main):001:0:0> helper.time_ago_in_words(Time.current)
=> "less than a minute"
irb(main):002:0:0> helper.time_ago_in_words(Time.current + 3days)
=> "3 days"