書くこと
railsのcurrent_page?を用いた条件分岐について
環境
Ruby 2.6.5
Rails 6.0.3.4
結論
current_page?で、現在のページに指定のURLが含まれているかを判断する。
ぶち当たった課題
現在取り組んでいるポートフォリオの作成において、問い合わせフォームの作成を行うことにした。そこで、「問い合わせフォームの画面以外に」、そのリンクを設置しようとした。(具体的にはfooter)
(中略)
<footer>
お問い合わせはこちらから<br/>
<%= link_to "お問い合わせフォーム", new_contact_path%>
</footer>
(中略)
しかし、application.html.erbに記述すると、すべてのerbページに表示されてしまうため、これではお問い合わせページにも反映されてしまう。
current_page?で条件分岐させる。
そこで、前述のcurrent_page?を~~公式ドキュメント~~
(2021/02/22追記 公式ドキュメントはこちら])で発見し、その用法のうち、
# コントローラとアクションを指定
current_page?(controller: 'library', action: 'checkout')
こちらの記述を見つけたので、contactsコントローラーのnewアクション以外で表示するよう条件分岐させた。(2行目)
<footer>
<% unless current_page?(controller:"contacts", action: "new") %>
お問い合わせはこちらから<br/>
<%= link_to "お問い合わせフォーム", new_contact_path%>
<% end %>
</footer>
うまくいきました。
補足
Railsドキュメントでは、
指定したURLが、現在表示されているかチェック
するために用いると書かれています。今回使用したコントローラーとアクションを指定する以外にも直接URLを指定できたりするようなので、自分の状況に応じて利用してみてください。
最後に
最後まで読んでいただき、ありがとうございます。
ソースコード、記事の書き方について**「もっとこうしたほうがいいよ!」というご意見、「そこどうなっているの?」というご質問**など、お待ちしております。
参考文献
- Railsドキュメント
- [Ruby on Rails API Module
ActionView::Helpers::UrlHelper] (https://api.rubyonrails.org/classes/ActionView/Helpers/UrlHelper.html#method-i-current_page-3F)