ビュー内から現在のコントローラーが何であるかを把握する方法はありますか?
これを知りたい理由の例:複数のコントローラーが同じレイアウトを共有している場合、レイアウトERBファイルで、コントローラーに基づいて現在のページのメニュー項目を強調表示したい部分があるかもしれません。
たぶんそれは悪いアプローチです。もしそうなら、これを行うためのより好ましい方法は何ですか?
しかし、現在のコントローラーの名前を取得する方法について知りたいです。
(明らかに、各コントローラーに@controller_name = 'users'
のようなものを入れることができますが、Railsのようなものは既に舞台裏で行われているように思えます。 )
controller_name
は、現在のビューを提供するために使用されるコントローラーの名前を保持します。
また、Rails Guidesには次のように書かれています。
Paramsハッシュには常に:controllerおよび:actionキーが含まれますが、メソッドcontroller_nameおよびaction_nameを使用する必要がありますこれらの値にアクセスする代わりに
したがって、現在開いているページのリンクに挿入する必要がある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>
#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) %>
controller_path
は、現在のビューを提供するために使用されるコントローラーのパスを保持します。 (つまり:admin/settings
)。
そして
controller_name
は、現在のビューを提供するために使用されるコントローラーの名前を保持します。 (例:settings
)。