क्या मुझे दृश्य में वर्तमान नियंत्रक का नाम मिल सकता है?


205

क्या यह पता लगाने का एक तरीका है कि वर्तमान नियंत्रक दृश्य के भीतर से क्या है?

एक उदाहरण के लिए कि मैं यह क्यों जानना चाहता हूं: यदि कई नियंत्रक समान लेआउट साझा करते हैं, तो मेरे पास लेआउट ERB फ़ाइल में एक हिस्सा हो सकता है जहां मैं नियंत्रक के आधार पर वर्तमान पृष्ठ के मेनू आइटम को उजागर करना चाहता हूं।

शायद यह एक बुरा तरीका है। यदि हां, तो ऐसा करने के लिए अधिक पसंदीदा तरीका क्या है?

मैं वर्तमान नियंत्रक का नाम पाने के बारे में जानना चाहता हूं।

(जाहिर है कि मैं @controller_name = 'users'प्रत्येक कंट्रोलर में कुछ डाल सकता हूं ; लेकिन ऐसा लगता है कि जिस तरह की चीज रेल पहले से ही पर्दे के पीछे से होती है। इसलिए मैं सोच रहा हूं कि क्या कोई अंतर्निहित तरीका है।)

जवाबों:


246

controller_name वर्तमान दृश्य की सेवा के लिए उपयोग किए जाने वाले नियंत्रक का नाम रखता है।


94
वास्तव paramsमें देखने में उपयोग करने के लिए बुरा अभ्यास है । controller_nameइसके बजाय का उपयोग करें
coorasse

1
@coorasse सही है, यह सुनिश्चित करने के लिए कि जानकारी वहाँ है, लेकिन नियंत्रक_नाम पर निर्भर रहना बेहतर है
Cec

261

रेल गाइड में, यह कहता है:

परम हैश में हमेशा कंट्रोलर और: एक्शन कीज़ होते हैं, लेकिन आपको इन वैल्यूज़ को एक्सेस करने के बजाय कंट्रोलर_नाम और एक्शन_नाम का इस्तेमाल करना चाहिए।

एक्शनकंट्रोलर पैरामीटर्स

तो मान लें कि आपके पास एक CSS क्लास है active, जिसे किसी भी लिंक में डाला जाना चाहिए जिसका पेज वर्तमान में खुला है (हो सकता है कि आप अलग तरह से स्टाइल कर सकें)। यदि आपके पास एक क्रिया के static_pagesसाथ एक नियंत्रक aboutहै, तो आप अपने दृश्य में लिंक को उजागर कर सकते हैं:

<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
आप इस तरह से एक नाम स्थान के पीछे अपने नियंत्रक है, तो: Admin::Ordersतो controller_nameऔर params[:controller]हो जाएगा "orders"और "admin/orders"क्रमशः।
विक्टर फोनिक

8
मैं तो बस इस का उपयोग करने की कोशिश की और Admin::UsersControllerवास्तव में एक है controller_nameकी usersहै और एक controller_pathकी admin/usersरेल 4.1.0 में।
ब्रैंडन

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

संदर्भ


1
आईडी प्राप्त करने के लिए, ActionController :: रूटिंग :: रूट अब काम नहीं करता है। आप ऐसा कर सकते हैं: <% = request.path_parameters [: id]%>
rmcsharry

2

controller_pathवर्तमान दृश्य की सेवा के लिए उपयोग किए जाने वाले नियंत्रक का पथ रखता है। (यानी:) admin/settings

तथा

controller_nameवर्तमान दृश्य की सेवा के लिए उपयोग किए जाने वाले नियंत्रक का नाम रखता है। (यानी:) settings


0

यदि आप अपने एप्लिकेशन में सभी स्टाइलशीट का उपयोग करना चाहते हैं तो बस इस लाइन को application.html.erb में जोड़ दें। इसे <head> टैग के अंदर डालें

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

इसके अलावा, एक अलग नियंत्रक पर एक ही वर्ग सीएसएस निर्दिष्ट करने के लिए
इस लाइन bodyको application.html.erb में जोड़ें

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

इसलिए, अब उदाहरण के लिए मैं p'होम' कंट्रोलर और 'इंडेक्स' एक्शन में टैग को बदलना चाहूंगा । अंदर index.scssफ़ाइल जोड़ता है।

.nameOfController-nameOfAction <tag> { }

 .home-index p {
        color:red !important;
      }
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.