RailsでView作っているときに、nav-barやside-barは共通部分なので部分テンプレートで書き出してrenderメソッド使うと思いますが、今回トップページにはそれを入れたくないけど、それ以外には全部入れたいみたいな時の対処法です。
#今回の実装に至ったきっかけ
- トップページはオシャレな感じにしたい!上とか横にガチャガチャいらない!
- でも他のページには便利なので入れたい!
ということでトップページ(今回はhomesコントローラーとします)からnav-barとside-barを消す、というか表示させない方法です。
使用するコントローラーによって条件分岐する
使用するコントローラー名を取得するメソッドは
controller.controller_name
で取得できます。
これによって、条件分岐をapplication.html.erbに書いていきます。
application.html.erb
<!DOCTYPE html>
<html>
<head>
<title>Hoge</title>
<%= csrf_meta_tags %>
<%= csp_meta_tag %>
<%= stylesheet_link_tag 'application', media: 'all', 'data-turbolinks-track': 'reload' %>
<%= javascript_include_tag 'application', 'data-turbolinks-track': 'reload' %>
</head>
<body>
<% if controller.controller_name != 'homes' %>%
<%= render '/layouts/navbar' %>
<%= render '/layouts/sidebar' %>
<% end %>
<%= yield %>
<%= render '/layouts/footer' %>
</body>
</html>
#アクション名も取得できる
controller.action_name
でアクション名を指定できます。
if controller.action_name=="new"(以下略)
みたいな感じで。
これを使えば同じ画面で登録する、更新する、と言ったボタンのテキストだけを変えることなどもできます。
#参考にした記事
https://qiita.com/lasershow/items/e7a75d3e1653c9ca39d8