どうした?
「表示が同じページは部分テンプレートを使う」
これはどんな教材でも言われている内容です。
よくある例としてnewページとeditページは_form.html.erbというファイルを用意して、renderメソッドで呼び出すことで、投稿フォームをDRYに保ちます。
ただ、ほとんど同じだけどアクションによって表示の一部を変えたい時ってあると思うんです。
そんな時の対処法をアウトプットします。
手順
今回は、newページとeditページに対して_form.html.erbというファイルを用意し、ページタイトルをアクションごとに変えるというシーンを考えてみます。
ビューファイル上でcontroller.action_nameでの条件分岐をする
controller.action_nameは、現在のアクション名を返すメソッドです。
これを利用することで、caseで条件分岐させてアクションごとに表示を変えることができます。
<% case controller.action_name %>
<% when 'new' %>
<h1>新規作成</h1>
<% when 'edit' %>
<h1>編集</h1>
<% end %>
アクションごとにメソッド化してしまう方法
アクションごとにメソッド化することで、コードの可読性が良くなります。
application_helper.rbにて、以下のように定義します。
module ApplicationHelper
def index?
controller.action_name == 'index'
end
def show?
controller.action_name == 'show'
end
def new?
controller.action_name == 'new'
end
def edit?
controller.action_name == 'edit'
end
end
これらのメソッドを使用することで、ビューファイル上では以下のように条件分岐することができます。
<% if new? %>
<h1>新規作成</h1>
<% elsif edit? %>
<h1>編集</h1>
<% end %>
おまけ
コントローラ名を取得したいときは
<%= controller.controller_name %>
を使用できます。
まとめ
こういったメタ感?のあるメソッドはとても便利ですね。
もっと勉強したいと思いました。
参考