Railsの技: ナビゲーションリンクで便利なlink_to_unless_currentメソッド(翻訳)
Railsの古典的なlink_to
ヘルパーメソッドは皆さんもとっくにお馴染みでしょう。しかしlink_to_unless_current
という変種はご存知ですか?
link_to_unless_current
メソッドの動作は、「リンク先がブラウザの現在のURLと同じ場合はリンクを生成しない」「それ以外の場合はlink_to
と同じ」です。
使い方
link_to
をlink_to_unless_current
に置き換えるだけで完了です。そのページを表示していない場合は<a>
タグをレンダリングし、そのページを表示している場合はリンクテキストだけをレンダリングします。
<nav class="flex flex-col space-y-1">
<%= link_to_unless_current "Dashboard", dashboard_path %>
<%= link_to_unless_current "Team", teams_path %>
<%= link_to_unless_current "Projects", projects_path %>
...
</nav>
/dashboard
を開いている場合は、上のテンプレートから以下のHTMLが生成されます。
<nav class="flex flex-col space-y-1">
Dashboard
<a href="/teams">Teams</a>
<a href="/projects">Projects</a>
...
</nav>
リンク名の代わりにブロックを渡してレンダリングすることもできます。これは共有ビューを作成するときに重宝します。たとえば、Post
のアクションを持つ以下のようなパーシャルを作成できます。
<%= link_to_unless_current "+ Comment", new_comment_path do
link_to "Back", posts_path
end %>
類似のヘルパーメソッド
ご想像のとおり、link_to_if
やlink_to_unless
といった類似のヘルパーメソッドを使えばリンクを生成するかどうかの条件を指定できます。
以下のように「通常はPost
のリストをすべて表示する」「ただしadminとしてログインしている場合はリストのタイトルをeditページへのリンクに変える」ことも可能です。
<% @posts.each do |post| %>
<%= link_to_if @user.admin?, post.title, manage_post_path(post) %>
<% end %>
参考資料
- Rails APIドキュメント:
UrlHelper#link_to_unless_current
-
Rails APIドキュメント:
UrlHelper#link_to_if
-
Rails APIドキュメント:
UrlHelper#link_to_unless
概要
原著者の許諾を得て翻訳・公開いたします。