Tôi có thể lấy tên của bộ điều khiển hiện tại trong khung nhìn không?


205

Có cách nào để tìm ra bộ điều khiển hiện tại từ bên trong khung nhìn không?

Để biết ví dụ về lý do tại sao tôi muốn biết điều này: nếu một số bộ điều khiển chia sẻ cùng bố cục, tôi có thể có một phần trong tệp ERB bố cục nơi tôi muốn làm nổi bật mục menu của trang hiện tại dựa trên bộ điều khiển.

Có lẽ đó là một cách tiếp cận xấu. Nếu vậy, cách ưa thích hơn để làm điều này là gì?

Dù vậy, tôi cũng muốn biết về việc lấy tên của bộ điều khiển hiện tại.

(Rõ ràng là tôi có thể đặt một cái gì đó giống như @controller_name = 'users'trong mỗi bộ điều khiển; nhưng có vẻ như đó là thứ mà Rails đã thực hiện ở hậu trường. Vì vậy, tôi chỉ tự hỏi liệu có cách tích hợp nào không.)

Câu trả lời:


246

controller_name giữ tên của bộ điều khiển được sử dụng để phục vụ cho chế độ xem hiện tại.


94
Trên thực tế là thực hành xấu để sử dụng paramstrong xem. Vui lòng sử dụng controller_namethay thế
coorasse

1
@coorasse là đúng, chắc chắn thông tin là có, nhưng dựa vào control_name thì tốt hơn
Cec

261

Trong Hướng dẫn Rails, nó nói:

Các params băm sẽ luôn chứa: Phím hành động, nhưng bạn nên sử dụng các phương pháp: điều khiển và controller_nameACTION_NAME thay vì truy cập các giá trị

Tham số ActionControll

Vì vậy, giả sử bạn có một lớp CSS active, nên được chèn vào bất kỳ liên kết nào có trang hiện đang mở (có thể để bạn có thể tạo kiểu khác nhau). Nếu bạn có một static_pagesbộ điều khiển với một abouthành động, thì bạn có thể đánh dấu liên kết như vậy trong chế độ xem của bạn:

<li>
  <a class='button <% if controller.controller_name == "static_pages" && controller.action_name == "about" %>active<%end%>' href="https://stackoverflow.com/about">
      About Us
  </a>
</li>

21
Nếu bạn có điều khiển của bạn đằng sau một namespace như thế này: Admin::Orderssau đó controller_nameparams[:controller]sẽ "orders""admin/orders"tương ứng.
Viktor Fonic

8
Tôi chỉ cố gắng sử dụng này và Admin::UsersControllerthực sự có một controller_namesố usersvà một controller_pathsố admin/userstrong Rails 4.1.0.
Brandon

89
#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) %>

tài liệu tham khảo


1
Để lấy id, ActionContoder :: Routing :: Routes không còn hoạt động. Bạn có thể làm điều này: <% = request.path_parameter [: id]%>
rmcsharry

2

controller_pathgiữ đường dẫn của bộ điều khiển được sử dụng để phục vụ chế độ xem hiện tại. (tức là admin/settings:).

controller_namegiữ tên của bộ điều khiển được sử dụng để phục vụ cho chế độ xem hiện tại. (tức là settings:).


0

Nếu bạn muốn sử dụng tất cả các bản định kiểu trong ứng dụng của mình, chỉ cần thêm dòng này trong application.html.erb. Chèn nó vào trong <head> thẻ

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

Ngoài ra, để chỉ định cùng một lớp CSS trên một bộ điều khiển khác
Thêm dòng này vào trong bodyapplication.html.erb

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

Vì vậy, bây giờ, ví dụ tôi muốn thay đổi pthẻ trong bộ điều khiển 'home' và 'index'. Bên trong index.scsstập tin thêm.

.nameOfController-nameOfAction <tag> { }

 .home-index p {
        color:red !important;
      }
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.