Nobody dies a virgin

映画/音楽/時々プログラミング

<%= link_to_if %>は使えるやつ

こんにちはタカヤです。 初めてのブログ投稿ですが、自己紹介は後々に譲るとして今回は便利なメッソドを見つけたので備忘録として残しておきたいと思います。

link_to_ifとは

例えばこんな時に使えます。

例: ログインしてるユーザーにだけ表示したいリンクがあるとき(ex. 記事編集、削除)

つまり、ログインしていないユーザーがアプリを閲覧したときに記事の編集や削除のリンクがあると意味もない見た目もイマイチです。そんなときはlink_to_ifを使って条件に一致したときのみリンクを生成するのがこのメソッドです。

使い方

<%= link_to_if(user_signed_in? && article.user_id == current_user.id, "編集", edit_article_path(article))  {}%>
<%= link_to_if(user_signed_in? && article.user_id == current_user.id, "削除", article, method: :delete, data: { confirm: 'Are you sure?' })  {}%>

第一引数には条件を記述します。

今回の場合は、 user_signed_in? && article.user_id == current_user.id となっています。これはuser_signed_in?でユーザーがログインしていればtrueを返すdeviseというgemのヘルパーメソッドです。

そして、次のarticle.user_id == current_user.idはアソシエーションを用いて記述していますが、現在ログインユーザーと記事を書いたユーザーが一致しているときはtrueを返します。

最後にこの両方を&&で繋げて両方が成り立っているときにtrueを返すようになっています。

このようすればビューファイルに直接条件分岐を書かずに済みます。でも、個人的に思ったのはこれはよく使うのでヘルパーに切り出した方が綺麗で保守性が上がる感と思いました。

参考ページ

shuzo-kino.hateblo.jp

link_to_if - リファレンス - - Railsドキュメント

link_to_ifで条件がfalseの時、表示を消す方法 - IwazerReport