Can I get the name of the current controller in the view?

后端 未结 5 1728
误落风尘
误落风尘 2020-11-29 16:17

Is there a way to figure out what the current controller is from within the view?

For an example of why I would want to know this: if several controllers share the s

相关标签:
5条回答
  • 2020-11-29 16:52

    controller_name holds the name of the controller used to serve the current view.

    0 讨论(0)
  • 2020-11-29 16:53
    #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) %>
    

    reference

    0 讨论(0)
  • 2020-11-29 16:55

    controller_path holds the path of the controller used to serve the current view. (ie: admin/settings).

    and

    controller_name holds the name of the controller used to serve the current view. (ie: settings).

    0 讨论(0)
  • 2020-11-29 17:01

    If you want to use all stylesheet in your app just adds this line in application.html.erb. Insert it inside <head> tag

      <%= stylesheet_link_tag  controller.controller_name , media: 'all', 'data-turbolinks-track': 'reload' %>
    

    Also, to specify the same class CSS on a different controller
    Add this line in the body of application.html.erb

      <body class="<%= controller.controller_name %>-<%= controller.action_name %>">
    

    So, now for example I would like to change the p tag in 'home' controller and 'index' action. Inside index.scss file adds.

    .nameOfController-nameOfAction <tag> { }
    

     .home-index p {
            color:red !important;
          }
    
    0 讨论(0)
  • 2020-11-29 17:09

    In the Rails Guides, it says:

    The params hash will always contain the :controller and :action keys, but you should use the methods controller_name and action_name instead to access these values

    ActionController Parameters

    So let's say you have a CSS class active , that should be inserted in any link whose page is currently open (maybe so that you can style differently) . If you have a static_pages controller with an about action, you can then highlight the link like so in your view:

    <li>
      <a class='button <% if controller.controller_name == "static_pages" && controller.action_name == "about" %>active<%end%>' href="/about">
          About Us
      </a>
    </li>
    
    0 讨论(0)
提交回复
热议问题