LoginSignup
0
0

More than 1 year has passed since last update.

ビューテンプレートについて

Posted at

パスとURLヘルパーメソッド

ルーティングを表示する際のPrefixの値+_pathなどとするとルーティングで定義したパスが取得可能になります。

以下例になります。

次のようなルーティングを表示した場合のprefix欄にあたる
publisheredit_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"
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0