2013-04-04 12 views
11

मुझे एकाधिक नामों के माध्यम से एक मार्ग सुलभ होना चाहिए। मेरी routes.rb में मैंउपनाम मार्ग का नाम

get '/route' => 'controller#edit', :as => 'name_a' 
get '/route' => 'controller#edit', :as => 'name_b' 

किया यह अच्छी तरह से काम करता है लेकिन कुछ नहीं के लिए मार्गों तालिका लोड करता है। प्रलेखन की मेरी समझ से, :as कॉल करते समय एक सहायक विधि को परिभाषित करता है।

तो मैं अपने ApplicationController के पास गया और

alias_method :name_b, :name_a 

जोड़ा गया है और मैं routes.rb

से दूसरी पंक्ति को हटा दिया, लेकिन वह Uncaught exception: undefined method name_a for class ApplicationController

के साथ विफल हो वहाँ के लिए दो नाम होने के किसी भी उचित तरीके से है एक रास्ता?

================= संपादित ==================== विस्तार:

मैं 2 प्रकार के उपयोगकर्ताओं के सत्र, पंजीकरण, लॉकिंग इत्यादि का प्रबंधन करने के लिए डेविस मणि का उपयोग करें, चलो उन्हें Admin और Guest पर कॉल करें। मणि बहुत अच्छी तरह से रखा जाता है लेकिन यह निश्चित रूप से व्यवहार करने के लिए निश्चित मार्ग नाम मांगता है।

app 
    controllers 
    users 
     admin 
      registration_controller.rb 
     guest 
      registration_controller.rb 
     session_controller.rb 
     password_controller.rb 
     registration_controller.rb 

Admin और Guest नियंत्रकों से विरासत:

मेरे मामले में, जहाँ तक वसीयत का संबंध है, केवल पंजीकरण की प्रक्रिया अलग तो मैं एक संरचना है जो इस प्रकार लग रहा है निर्माण करने के लिए कोशिश कर रहा हूँ है पंजीकरण_ नियंत्रक से ऊपर जो डेविस से प्राप्त होता है।

अब, ठीक से काम करने के लिए, उदाहरण के लिए पासवर्ड को पुनर्प्राप्ति या हटाने के लिए नाम guest_user_password और admin_user_password नामों की आवश्यकता है। मेरे मामले में, दोनों एक ही रास्ते में हैं इसलिए मैं दोनों नामों को एक ही 'उपयोगकर्ता/पासवर्ड' नियंत्रक पर रीडायरेक्ट करना चाहता हूं।

अधिक महत्वपूर्ण, और यही कारण है कि मैं वास्तव में अलगाव करना चाहता था। क्या यह है कि मेरे विचारों पर ध्यान नहीं दिया जाना चाहिए कि यह पासवर्ड पुनर्प्राप्ति नियंत्रक पर रीडायरेक्ट करते समय 10 और Guest मार्गों से निपट रहा है या नहीं। दोनों उपयोगकर्ता हैं इसलिए मैं दोनों के लिए user_password का उपयोग करना चाहता हूं।

इसलिए मेरा प्रश्न। :)

यह भी ध्यान दें कि जैसा कि मैंने लिखा है, चीजें काम करती हैं। मैं इसे लिखने का 'सबसे सुंदर तरीका' पाने की कोशिश कर रहा हूं।

+1

: जैसा कि => 'name_a' एक उपनाम बनाता है जिसका आप मार्ग के लिए उपयोग कर सकते हैं, उदाहरण के लिए name_a_path और name_b_path, यह एक रूटिंग तंत्र कुछ नहीं है जो नियंत्रक में होता है। –

+0

तो इसका मतलब यह नहीं होगा कि रूटिंग टेबल लोड करने के अलावा कोई अन्य तरीका नहीं है। :(धन्यवाद। – muichkine

+0

क्यों दुनिया में आपको अलग-अलग नामों से उसी पथ का संदर्भ देने की आवश्यकता होगी? – Catfish

उत्तर

3

अपने एप्लिकेशन नियंत्रक में उपनाम डालने के बारे में कैसे?

class ApplicationController < ActionController::Base 

alias_method :route_new, :route_old 
helper_method :route_new 

याद रखें कि यह नया नाम है, फिर पुराना नाम।

हेल्पर_मॉइड कॉल इन्हें आपके विचारों में उपयोग करने के लिए है और न केवल नियंत्रकों के लिए है।

यदि आप चाहें, तो आप इस RouteAliases

+0

यह एप्लिकेशन के लिए कोई सार्वजनिक मार्ग नहीं जोड़ता है। – muichkine

+0

@muichkine और न ही यह चाहिए, आपको एक नए मार्ग की आवश्यकता क्यों होगी? लेकिन आप जानते हैं कि आपको इसे alias_method कहने की आवश्यकता है:: path_new_path,: path_old_path, है ना? – Houen

+0

एक नया मार्ग तृतीय पक्ष एकाग्रता के लिए एपीआई को स्पष्ट करेगा। लेकिन असल में मुझे 'संसाधन: माल, नियंत्रक =>: आइटम, प्रकार:> अच्छा' संसाधनों: सेवाओं, नियंत्रक =>: आइटम, प्रकार => 'सेवा' ' – muichkine

0

की तरह एक शामिल कुछ मॉड्यूल बुलाया में जगह कर सकते हैं आप अपने routes.rb को कुछ इस तरह जोड़ सकते हैं:

Rails.application.routes.draw do 

    ... 

    Rails.application.routes.named_routes.tap do |named_routes| 
    named_routes['new_name'] = named_routes['real_name'] 
    end 
end 

यह new_name_path और new_name_url सहायकों पैदा करेगा। मैंने रेलवे 5.0.6 के साथ इसका परीक्षण किया है।

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