2011-06-25 17 views
27

पर _index जोड़ता है मैं रेल 3.0 पर रेल 2.3.8 संस्करण माइग्रेट कर रहा हूं और इसलिए मैंने अपनी रूट फ़ाइल को फिर से लिखा है। जब मैं rake routes का उपयोग करके मार्गों की सूची देता हूं, तो मुझे लगता है कि कुछ रूट नामों में _index शामिल है। मैं समझ नहीं सकता कि यह क्यों है।रेल 3 मार्ग रूट नाम

प्रासंगिक मार्गों:

रेल 2.3.8:

map.namespace "tracker", :path_prefix => "" do |planner| 
    planner.resources :planner, :collection => {:step1 => :get, 
               :add => :get, 
               :unsubscribe => [:get, :post] } 
end 

रेल 3.0 मार्ग:

namespace "tracker", :path => "" do 
    resources :planner do 
    collection do 
     get :step1 
     get :add 
     get :unsubscribe 
     post :unsubscribe 
    end 
    end 
end 

rake routes

रेल से उत्पादन 2.3.8

step1_tracker_planner  GET /planner/step1(.:format) 
add_tracker_planner   GET /planner/add(.:format) 
unsubscribe_tracker_planner GET /planner/unsubscribe(.:format) 
          POST /planner/unsubscribe(.:format) 

रेल 3,0

step1_tracker_planner_index  GET /planner/step1(.:format) 
add_tracker_planner_index   GET /planner/add(.:format) 
unsubscribe_tracker_planner_index GET /planner/unsubscribe(.:format) 
            POST /planner/unsubscribe(.:format) 

क्यों इस _index जोड़ा जा रहा है के रूप में कोई भी विचार बहुत सराहना की जाएगी।

उत्तर

41

ऐसा इसलिए है क्योंकि :planners के बजाय आपके संसाधन को :planner नाम दिया गया है कि रेल ने नीचे दिए गए किसी भी संग्रह में _index जोड़ने का निर्णय लिया है। मेरा अनुमान है कि पठनीयता के लिए यह है।

संग्रह में नामित क्रिया सामान्य रूप से एक क्रिया में अनुवाद करती है, इसलिए मैं देख सकता हूं कि यह क्यों समझ में आता है।

resources :photos do 
    collection do 
    get 'search' 
    end 
end 

search_photos GET /photos/search(.:format) 

लेकिन अगर बजाय हम संसाधनों 'तस्वीर' ...

resources :photo do 
    collection do 
    get 'search' 
    end 
end 

search_photo_index GET /photo/search(.:format) 

बुलाया पहले मामले में, आप खोज "फ़ोटो": ठेठ तस्वीरें संसाधन उदाहरण मार्ग डॉक्स में दिया ले लो , और दूसरे मामले में आप "फोटो इंडेक्स" खोजते हैं।

+2

क्या इस व्यवहार को बदलने का कोई तरीका है? – etc

+9

आप अपनी मार्ग फ़ाइल में "संसाधन" के बजाय "संसाधन" (एकवचन) शब्द का उपयोग कर सकते हैं। यह सूचकांक मार्ग के अपवाद के साथ "संसाधन" अनुरोध के समान मार्ग उत्पन्न करेगा। चूंकि रेल मानते हैं कि आप एकवचन वस्तु के साथ काम कर रहे हैं, यह स्वचालित रूप से एक इंडेक्स उत्पन्न नहीं कर रहा है क्योंकि आपके पास आइटमों की सूची नहीं होगी, आपके पास केवल एक होगा। यहां और पढ़ें: http://guides.rubyonrails.org/routing.html#singular-resources – Jocko

9

आपको या तो resource :planner या तो resources :planners का उपयोग करना चाहिए जो आपको चाहिए। एकवचन संसाधन के बारे में जानने के लिए और यह अंतर Rails Guides देखें।

+0

ग्रेट सलाह, धन्यवाद! –

+0

क्या होगा यदि आपका मॉडल एकवचन और बहुवचन (उदाहरण के लिए, श्रृंखला) में समान है? ऐसा लगता है कि यह अभी भी _index जोड़ने के लिए नहीं है। – MattMcKnight

0

Semyon Perepelitsa की प्रतिक्रिया से जारी रखते हुए, ध्यान दें resource :planner को उम्मीद है कि नियंत्रक का नाम PlannersController है, जबकि resources :plannersPlannerController की उम्मीद है।

आप जब संसाधनों से संसाधन के लिए बदल अपने नियंत्रक का नाम बदलने के लिए नहीं करना चाहते हैं, तो आप resource :planner, controller: :planner निर्दिष्ट करके डिफ़ॉल्ट ओवरराइड कर सकते हैं।

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