2011-03-03 11 views
24

मैं यह देखने के लिए current_page? लागू कर रहा हूं कि वर्तमान नियंत्रक और क्रिया किसी निश्चित मान के बराबर है, हालांकि यह उस नियंत्रक/क्रिया संयोजन पर सही नहीं होगा।रेल वर्तमान_पृष्ठ? बनाम नियंत्रक.controller_name

- if controller.controller_name == 'pages' && controller.action_name == 'main' 
# this works just fine 

मेरी वाक्य रचना गलत है या कुछ और यहाँ क्या हो रहा है:

- if current_page?(:controller => 'pages', :action => 'main') 
# doesn't return true when on that controller/action combination 

केवल जिस तरह से यह काम कर रहा है, तो मैं बहुत की तरह थोड़ा और वर्बोज़ विधि का उपयोग है? क्या ऐसा करने का कोई बेहतर तरीका है, जैसे कि बूल सेट करना या यह सही तरीका है?

अंतिम लक्ष्य केवल अन्य लैंडिंग पृष्ठ पर एक निश्चित शीर्षलेख दिखाने के लिए है, जबकि अन्य सभी पृष्ठों पर एक अलग शीर्षलेख दिखा रहा है।

संपादित: प्रासंगिक उत्पादन rake routes से:

pages_main GET /pages/main(.:format) {:controller=>"pages", :action=>"main"} 

root /(.:format) {:controller=>"pages", :action=>"main"} 

इसके अलावा, इस प्रतिपादन पर सर्वर उत्पादन होता है:

Started GET "/" for 127.0.0.1 at 2011-03-03 16:54:40 -0500 
Processing by PagesController#main as HTML 
Rendered pages/main.html.haml within layouts/application (203.8ms) 
+2

आपके एक्शन विधि नामों को सम्मेलन द्वारा पूंजी पत्र से शुरू नहीं होना चाहिए। –

+0

हाँ, 'मुख्य' होना चाहिए 'मुख्य'। देखें कि इससे – s84

+0

कन्वेंशन अलग हो गया है, दुर्भाग्य से यह कोई फर्क नहीं पड़ता। सुझाव के लिए धन्यवाद सब वही! – iwasrobbed

उत्तर

29

current_page?(root_path) ठीक काम करता है।

लेकिन मैं इसे :controller और :action

यह सहायक लगता है के साथ काम नहीं कर सकते हैं एक स्ट्रिंग की उम्मीद है, तो:

current_page?(url_for(:controller => 'pages', :action => 'main')) 

भी ठीक काम करता है।

the doc के साथ अजीब विरोधाभास।

+0

यह अजीब बात है कि मानक तरीका काम नहीं करता है, लेकिन मैं 'current_page? (Root_path)' के साथ जाऊंगा अब से यह अच्छा और छोटा है। जवाब के लिए धन्यवाद! – iwasrobbed

+0

'current_page? (Root_path) 'केवल तभी सही होना चाहिए जब वर्तमान पथ के लिए' "/" ', /' '/'/'' '' 'मुझे लगता है। क्या यह 'गलत नियंत्रक_नाम ==' पृष्ठ 'और& action_name ==' main'' है? – kangkyu

+0

मेरे मामले में मेरे पास रूट के लिए असाइन किया गया 'होम # इंडेक्स' नियंत्रक है जो इस मामले में, केवल 'पृष्ठ # मुख्य' पर रीडायरेक्ट करता है। फिर मैं 'current_page? (Main_page_path) का उपयोग करता हूं मान लीजिए कि आपने उस मार्ग को 'config/routes.rb' में बनाया है –

4

मुझे यह समस्या थी जब मेरे पास 2 मार्ग थे जो बहुत समान थे। इस की जाँच करें:

match '/galleries/sales' => 'galleries#sales', :as => 'gallery_sales' 
match '/galleries/sales/:id' => 'galleries#sales', :as => 'gallery_category_sales' 

मेरे नियंत्रक कार्रवाई पैरामीटर के आधार पर उत्पादन संभाला है, और मैं मूल रूप से इस b/c मैं दोहराव नहीं करना चाहता था था।

जब मैंने किया था:

current_page?(:controller => 'galleries', :action => 'sales', :id => id) 

यह वापस किया नहीं सच यह करना चाहिए था जब, तो मैं एक अलग मार्ग और कार्रवाई बनाई है और यह ठीक काम किया।

संबंधित मुद्दे