Geçerli denetleyicinin adını görünümde alabilir miyim?


205

Geçerli denetleyicinin görünümden ne olduğunu anlamanın bir yolu var mı?

Bunu bilmek neden bir örnek için: birkaç denetleyici aynı düzeni paylaşıyorsa, düzen ERB dosyasında denetleyiciye dayalı geçerli sayfanın menü öğesini vurgulamak istediğim bir parçası olabilir.

Belki de bu kötü bir yaklaşımdır. Eğer öyleyse, bunu yapmanın daha çok tercih edilen yolu nedir?

Yine de, mevcut denetleyicinin adını her iki şekilde de almakla ilgileniyorum.

(Açıkçası @controller_name = 'users'her denetleyiciye bir şey koyabilirim ; ancak bu, Rails'in perde arkasında zaten yapacağı bir şey gibi görünüyor. Bu yüzden sadece yerleşik bir yol olup olmadığını merak ediyorum.)

Yanıtlar:


246

controller_name geçerli görünüme hizmet etmek için kullanılan denetleyicinin adını tutar.


94
Aslında paramsgörüş açısından kullanmak kötü bir uygulamadır . Lütfen controller_namebunun yerine kullanın
coorasse

1
@coorasse haklı, bilgi var, ama denetleyici_adı'na güvenmek daha iyi
Cec

261

Rails Kılavuzlarında şöyle diyor:

Params karma değeri her zaman: controller ve: action anahtarlarını içerecektir, ancak bu değerlere erişmek için controller_name ve action_name yöntemlerini kullanmalısınız.

ActionController Parametreleri

Diyelim ki active, şu anda açık olan herhangi bir bağlantıya eklenmesi gereken bir CSS sınıfınız var (belki de farklı şekil verebilirsiniz). Eylemi static_pagesolan bir denetleyiciniz varsa about, bağlantıyı görünümünüzdeki gibi vurgulayabilirsiniz:

<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
Eğer böyle bir ad arkasında denetleyicisi varsa: Admin::Orderso zaman controller_nameve params[:controller]olacak "orders"ve "admin/orders"sırasıyla.
Viktor Fonic

8
Sadece bu kullanmaya çalıştı ve Admin::UsersControlleraslında bir sahiptir controller_nameait usersve controller_pathiçinde admin/usersraylar 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) %>

referans


1
Kimliği almak için, ActionController :: Routing :: Routes artık çalışmıyor. Bunu yapabilirsiniz: <% = request.path_parameters [: id]%>
rmcsharry

2

controller_pathgeçerli görünüme hizmet etmek için kullanılan denetleyicinin yolunu tutar. (yani:) admin/settings.

ve

controller_namegeçerli görünüme hizmet etmek için kullanılan denetleyicinin adını tutar. (yani:) settings.


0

Uygulamanızdaki tüm stil sayfasını kullanmak istiyorsanız, bu satırı application.html.erb dosyasına ekler. <head> Etiketin içine ekle

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

Ayrıca, aynı sınıf CSS'sini farklı bir denetleyicide belirtmek için
Bu satırı bodyapplication.html.erb dosyasına ekleyin

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

Yani, şimdi örneğin p'home' denetleyicisi ve 'index' eylemindeki etiketi değiştirmek istiyorum . İçine index.scssdosya ekler.

.nameOfController-nameOfAction <tag> { }

 .home-index p {
        color:red !important;
      }
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.