web-dev-qa-db-ja.com

ビューで現在のコントローラーの名前を取得できますか?

ビュー内から現在のコントローラーが何であるかを把握する方法はありますか?

これを知りたい理由の例:複数のコントローラーが同じレイアウトを共有している場合、レイアウトERBファイルで、コントローラーに基づいて現在のページのメニュー項目を強調表示したい部分があるかもしれません。

たぶんそれは悪いアプローチです。もしそうなら、これを行うためのより好ましい方法は何ですか?

しかし、現在のコントローラーの名前を取得する方法について知りたいです。

(明らかに、各コントローラーに@controller_name = 'users'のようなものを入れることができますが、Railsのようなものは既に舞台裏で行われているように思えます。 )

195
Dan Tao

controller_nameは、現在のビューを提供するために使用されるコントローラーの名前を保持します。

224
Anubhaw

また、Rails Guidesには次のように書かれています。

Paramsハッシュには常に:controllerおよび:actionキーが含まれますが、メソッドcontroller_nameおよびaction_nameを使用する必要がありますこれらの値にアクセスする代わりに

ActionControllerパラメーター

したがって、現在開いているページのリンクに挿入する必要があるCSSクラスactiveがあるとします(おそらく、スタイルを変えることができるように)。 aboutアクションを持つstatic_pagesコントローラーがある場合、ビューでそのようなリンクを強調表示できます。

<li>
  <a class='button <% if controller.controller_name == "static_pages" && controller.action_name == "about" %>active<%end%>' href="/about">
      About Us
  </a>
</li>
252
Musili
#to get controller name:
<%= controller.controller_name %>
#=> 'users'

#to get action name, it is the method:
<%= controller.action_name %>
#=> 'show'


#to get id information:
<%= ActionController::Routing::Routes.recognize_path(request.url)[:id] %>
#=> '23'

# or display nicely
<%= debug Rails.application.routes.recognize_path(request.url) %>

参照

86
Thaha kp

controller_pathは、現在のビューを提供するために使用されるコントローラーのパスを保持します。 (つまり:admin/settings)。

そして

controller_nameは、現在のビューを提供するために使用されるコントローラーの名前を保持します。 (例:settings)。

2