Railsのlink_toヘルパとその仲間たちまとめ

バージョン

  • Ruby on Rails 6.0.2.1

link_toの仲間たち

link_to

いわずとしれたlink_to。
指定したページへのaタグを作成することができる。
個人的にはなぜか、この引数の順番がよくごっちゃになっちゃうんだけど、リンクの文章が先!リンク先が後!

<%= link_to '投稿一覧へ', '/posts' %>
<a href="/posts">投稿一覧へ</a>

複数のタグを囲んだaタグを作りたい

link_to にはブロックを渡すことができるのだけど、ブロックを渡すと、渡したブロックを囲むようにaタグが作成されることになる。

<%= link_to '/posts' do %>
  <strong>投稿一覧へ</strong>
<%- end -%>
<a href="/posts"><strong>投稿一覧へ</strong></a>

リンクをクリック時に本当に移動するのか確認したい

ページ遷移すると、そのページで行っていた作業とかは完全にリセットされてしまうので、ページを遷移する前にブラウザのダイアログなどで確認したい場合があると思う。
そんなとき、rails-ujsが有効であればlink_toのdata-confirmオプションを使って実現できる。

<%= link_to '投稿一覧へ', '/posts', data: {confirm: '本当に移動する?'} %>
<a data-confirm="本当に移動する?" href="/posts">投稿一覧へ</a>

このリンクをクリックすると、ブラウザのconfirmダイアログで確認してくれる。便利ですね。

二重クリックを防止したい

aタグっていうのは、ページ遷移するまでに何度でもクリックすることができる。そういった連続クリックをされるとまずい場合にも対応できる。
rails-ujsが有効であれば、data-disable-withオプションを使用する。

<%= link_to '投稿一覧へ', '/posts', data: {disable_with: '処理中です'} %>
<a data-disable-with="処理中です" href="/posts">投稿一覧へ</a>

このリンクをクリックすると、リンクの文章が「処理中です」に代わり、それ以上クリックできなくなる。
remote: trueのlink_toの場合などに活躍するかもしれない。

link_to_if

これは第1引数に条件を設定しておくと、その条件がtrueの場合にだけリンクを作成してくれる。

<%= link_to_if true, '投稿一覧へ', '/posts' %>
<%= link_to_if false, '投稿一覧へ', '/posts' %>
<a href="/posts">投稿一覧へ</a>
投稿一覧へ

上記のように、falseを渡した場合はaタグは生成されずに、ただのテキストになった。

link_to_unless

link_to_ifのunless版!それだけ!

<%= link_to_unless true, '投稿一覧へ', '/posts' %>
<%= link_to_unless false, '投稿一覧へ', '/posts' %>
投稿一覧へ
<a href="/posts">投稿一覧へ</a>

link_to_unless_current

link_toに渡したリンク先が、現在のページでなければリンクするというもの。
グローバルメニューなどで使う機会があると思う。便利。

くわしくはこちらの記事でどうぞ。
https://hai3.net/blog/link_to_unless_current/

タイトルとURLをコピーしました