LoginSignup
0
0

More than 1 year has passed since last update.

【Rails】部分テンプレートをアクションごとに挙動を変えたいときはcontroller.action_nameが便利

Posted at

どうした?

「表示が同じページは部分テンプレートを使う」
これはどんな教材でも言われている内容です。
よくある例として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にて、以下のように定義します。

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 %>

を使用できます。

まとめ

こういったメタ感?のあるメソッドはとても便利ですね。
もっと勉強したいと思いました。

参考

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0