रेल मार्ग में माले में संग्रह मार्ग और सदस्य मार्ग के बीच अंतर?


278

रेल मार्गों में संग्रह मार्गों और सदस्य मार्गों के बीच अंतर क्या है?

उदाहरण के लिए,

resources :photos do
  member do
    get :preview
  end
end

बनाम

resources :photos do
  collection do
    get :search
  end
end

मुझे समझ नहीं आ रहा है।

जवाबों:


407

एक सदस्य मार्ग को एक आईडी की आवश्यकता होगी, क्योंकि यह एक सदस्य पर कार्य करता है । एक संग्रह मार्ग इसलिए नहीं है क्योंकि यह वस्तुओं के संग्रह पर कार्य करता है। पूर्वावलोकन सदस्य मार्ग का एक उदाहरण है, क्योंकि यह एक वस्तु पर (और प्रदर्शित) करता है। खोज एक संग्रह मार्ग का एक उदाहरण है, क्योंकि यह वस्तुओं के संग्रह पर (और प्रदर्शित) कार्य करता है।


बनाने की कार्रवाई के बारे में क्या? कहो कि मैं 'बनाने' का विकल्प बनाना चाहता था - क्या यह एक सदस्य के रूप में गिना जाएगा?
डिजिटलवेस्टी

1
हाँ, बनाएँ एक सदस्य कार्रवाई है।
थियो

1
लेकिन बिना किसी ब्लॉक के "गेट" जोड़ने के बारे में क्या? क्या यह सदस्य या संग्रह मार्ग है? मेरे परीक्षण ने अपना संग्रह दिखाया लेकिन अलग-अलग आईडी चर नाम के साथ।
१०:११

6
क्या आप सदस्य कार्रवाई बनाने के बारे में निश्चित हैं पास करने के लिए कोई आईडी नहीं है।
जॉर्ज शॉ

6
@YoniGeek। गलत। मार्गदर्शक देखें .rubyonrails.org / rout.html , 2.7 नेस्टेड संसाधन। बनाएँ हमेशा एक संग्रह क्रिया है जैसा कि आप संग्रह में जोड़ रहे हैं। ध्यान दें कि नामित बनाएँ पथ हमेशा बहुवचन होता है। अपने उदाहरण में आप वोटों के संग्रह में एक नया वोट जोड़ रहे हैं जो पदों के सदस्य हैं। आईडी सदस्य पद को संदर्भित करता है, न कि बनाए जा रहे वोटों के संग्रह को। नामांकित पथ उदाहरण के लिए posts_votes_url होगा।
जॉर्ज शॉ

217
                URL                 Helper                      Description
----------------------------------------------------------------------------------------------------------------------------------
member          /photos/1/preview   preview_photo_path(photo)   Acts on a specific resource so required id (preview specific photo)
collection      /photos/search      search_photos_path          Acts on collection of resources(display all photos)

39
सबसे मूल्यवान पोस्ट!
aldo.roman.nurena

1
search_photos_pathइसके बजाय का उपयोग करना चाहिए search_photos_urlताकि लोग नहीं सोचेंगे _pathऔर _urlदोनों के बीच एक अंतर है।
जोशुआ पिंटर

31

थियो का जवाब सही है। दस्तावेज़ीकरण के लिए, मैं यह भी ध्यान देना चाहूंगा कि दोनों अलग-अलग पथ सहायक उत्पन्न करेंगे।

member {get 'preview'} उत्पन्न करेगा:

preview_photo_path(@photo) # /photos/1/preview

collection {get 'search'} उत्पन्न करेगा:

search_photos_path # /photos/search

नोट की बहुलता!


14

1) : संग्रह - संग्रह पर काम करने वाले अन्य कार्यों के लिए नामांकित मार्ग जोड़ें। एक हैश लेता है #{action} => #{method}, जहाँ विधि है :get/:post/:put/:delete, किसी भी पिछले की एक सरणी, या: यदि कोई विधि नहीं है। ये मार्ग एक URL जैसे / users / customers_list , ग्राहकों के मार्ग के साथ ___ers_url के लिए मैप करते हैं

map.resources: उपयोगकर्ता: संग्रह => {: customers_list =>: get}

2) :member- के रूप में ही है :collection, लेकिन एक विशिष्ट सदस्य पर काम करने वाले कार्यों के लिए।

map.resources: उपयोगकर्ता: सदस्य => {: निष्क्रिय =>: पोस्ट}

यह माना जाता है /users/1;inactive=> [:action => 'inactive', :id => 1]


अच्छा उदाहरण है। शीर्ष पर स्पष्टीकरण हालांकि बेहतर हो सकता था।
हितेश इसरानी
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.