どうした?
「表示が同じページは部分テンプレートを使う」
これはどんな教材でも言われている内容です。
よくある例として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 %>
を使用できます。
まとめ
こういったメタ感?のあるメソッドはとても便利ですね。
もっと勉強したいと思いました。
参考