रेल या बहुवचन नियंत्रक और सहायक नाम रेल में


112

क्या नियंत्रकों और सहायकों के लिए विलक्षण नामों का उपयोग करने का कोई नुकसान है? इस पर भरोसा करने के लिए कुछ भी नहीं लगता है। यहां तक ​​कि ऐसा लगता है कि सहायकों को अपने संबंधित नियंत्रकों के रूप में एकवचन बनाम बहुवचन के बारे में एक ही विकल्प नहीं बनाना है, कम से कम मेरे सीमित प्रयोग के अनुसार। क्या यह सच है?


2
मुझे एक ही दुविधा थी कि एकवचन या बहुवचन नियंत्रक नामों पर निर्णय लेने की कोशिश की जाए!
एंड्रयू

15
धन्यवाद :) रेल संस्कृति आपको बेवकूफ बनाने का एक तरीका है यदि आप इस तरह की चीजों पर सवाल उठाते हैं।
allyourcode

जवाबों:


158

निश्चित रूप से बहुवचन

आराम से रूटिंग और एक विलक्षण नियंत्रक के साथ

नियंत्रक:

dog_controller.rb  

मार्ग:

map.resources :dogs  # => blows up  
map.resources :dog  # is ok, but...  
dogs_path # => blows up  
dog_path  # => ok  

बहुवचन नियंत्रक का उपयोग करना

नियंत्रक:

dogs_controller.rb

मार्ग:

map.resources :dogs  
dogs_path # => ok  
dog_path # => ok  

rails generate controller --help बहुवचन उदाहरण हैं:

Example:
`rails generate controller CreditCards open debit credit close`

CreditCards controller with URLs like /credit_cards/debit.
    Controller: app/controllers/credit_cards_controller.rb
    Test:       test/controllers/credit_cards_controller_test.rb
    Views:      app/views/credit_cards/debit.html.erb [...]
    Helper:     app/helpers/credit_cards_helper.rb

23
माना। यह भ्रामक है कि नियंत्रकों के लिए 3.1 जनरेटर मदद संदेश "क्रेडिटकार्ड" (एकवचन) उदाहरण के रूप में उपयोग करता है।
bantic

4
रेल अब मदद करता है बहुवचन का उपयोग करता है: रेल उत्पन्न नियंत्रक CreditCards खुला डेबिट क्रेडिट करीब
27'13

3
अभी भी यहाँ एकवचन है क्रेडिटकार्ड
rcrogers

हम एकवचन नियंत्रक के लिए स्थान कैसे लिख सकते हैं stackoverflow.com/questions/29650094/…
santosh

इसलिए नामकरण बहुवचन होना चाहिए और मामला आया। जैसे:: रेल उत्पन्न नियंत्रक कुत्ते नए सूचकांक बनाने को नष्ट नष्ट संपादित करें "??
BKSpurgeon

27

नियंत्रकों के लिए बहुवचन नामों का उपयोग करना केवल एक सम्मेलन है।

बहुवचन नाम आमतौर पर अधिक प्राकृतिक लगते हैं (विशेषकर नियंत्रकों के लिए जो सीधे एक विशिष्ट मॉडल से जुड़े होते हैं: उपयोगकर्ता -> उपयोगकर्ता, आदि), लेकिन आप जो चाहें उपयोग कर सकते हैं।

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


10
क्या उपयोगकर्ता के लिए यूजरक्रंट्रोलर के अनुरूप नियंत्रक के लिए यह अधिक स्वाभाविक नहीं होगा ?? इसके अलावा, यदि आप डिफ़ॉल्ट मार्गों पर भरोसा करते हैं, तो आपको url मिल जाता है, जो / उपयोगकर्ताओं / संपादन की तरह दिखता है, जो ऐसा लगता है कि आप सभी उपयोगकर्ताओं को संपादित कर रहे हैं। मेरे लिए, यह बिल्कुल स्वाभाविक नहीं है।
अल्लौरकोड

5
@allyourcode: अच्छा, मुझे लगता है कि यह सब व्यक्तिपरक है। मेरे लिए, सभी उपयोगकर्ताओं की सूची होना / होना उपयोगकर्ता की तुलना में अधिक स्वाभाविक है।
कैन बर्क गडर

1
ओह, और यह रास्ता है।
कैन बर्क गडर

3
@ "उत्साहपूर्ण तरीका" एक सुरीले मंत्र की तरह लगता है। वास्तव में मुझे आश्चर्य नहीं है, क्योंकि रेल बहुत धार्मिक है। मुझे यह पसंद है कि REST के बारे में रेल्स कैसे जुनूनी हैं, फिर भी डिफ़ॉल्ट मार्ग बाकी नहीं हैं। यहां तक ​​कि Restful मार्गों को कॉन्फ़िगर करना अप्राकृतिक है। सहित: शर्तों => {: विधि =>: पोस्ट} कनेक्ट करने के लिए दूसरे तर्क में कोई मतलब नहीं है, के रूप में हैश निर्दिष्ट करने के लिए किसी भी अनुरोध को संभालने के लिए माना जाता है कि वर्तमान नियम से मेल खाता है, न कि किसी भी अनुरोध मौजूदा नियम से मेल खाता है या नहीं ।
allyourcode

2
के अनुसार @allyourcode इस संपादन के लिए डिफ़ॉल्ट मार्ग है / उपयोगकर्ताओं /: id / के बजाय / उपयोगकर्ताओं / संपादन संपादित करें। यह कहते हुए कि "सभी उपयोगकर्ताओं में से, आईडी के साथ उपयोगकर्ता को संपादित करें: आईडी" मुझे पूरी तरह से स्वाभाविक लगता है।
डेविडजी

19

एक मॉडल एकवचन है क्योंकि यह उपयोगकर्ता की तरह एक ही वस्तु को संदर्भित करता है। एक नियंत्रक बहुवचन है क्योंकि यह उपयोगकर्ताओं के संग्रह के लिए नियंत्रण (विधियाँ) है। कैसे मार्गों का नाम उस व्यक्तिगत डेवलपर के लिए है। मैंने कभी किसी उपयोगकर्ता से शिकायत नहीं की है कि वेब अनुरोध के लिए एक URL एकवचन या बहुवचन है। अंतिम परिणाम गुणवत्ता पृष्ठ प्रदर्शन या अंतिम उपयोगकर्ताओं के लिए एपीआई अनुरोधों की सेवा करते समय वर्तमान और भविष्य के योगदानकर्ताओं के लिए एक सामान्य सम्मेलन बनाए रखने के लिए होता है।


12

रेल गाइड में आपकी बहुत संपूर्ण व्याख्या है: http://edgeguides.rubyonrails.org/rout.html#resource-rout-the-rails-default


4
वास्तव में यह सही उत्तर है b / c यदि आप इसे पढ़ते हैं, तो यह बताता है कि बहुवचन संसाधनों के संग्रह के लिए सही उत्तर है। एक एकल संसाधन के लिए, एकवचन सही उत्तर है। प्रलेखन में उदाहरण। और वास्तव में, यह इस अन्य पोस्ट में अच्छी तरह से उत्तर दिया गया है: stackoverflow.com/questions/2614858/…
Rob

इस पोस्ट की तरह आधिकारिक संदर्भों द्वारा समर्थित उत्तर, newbies को बहुत मदद करता है! धन्यवाद
Wasif हुसैन

9

यह रेल सम्मेलन है कि एक नियंत्रक एक मॉडल को संभालता है, चाहे उस मॉडल का एक या अधिक उदाहरण रनटाइम के दौरान मौजूद हो सकते हैं। हालाँकि, आपके पास एक रेल एप्लिकेशन हो सकता है जहां (कुछ) नियंत्रक (और संबंधित दृश्य) किसी विशेष मॉडल से जुड़े नहीं हैं, बल्कि कार्यक्षमता के अधिक जटिल सेट को संभालते हैं। इस मामले में, स्वचालित बहुवचन का कोई मतलब नहीं है।

वर्तमान में मैं जिस रेल एप्लिकेशन पर काम कर रहा हूं, वह इस श्रेणी में फिट बैठता है, और यह मेरे लिए बस एक जलन है कि रेल को उम्मीद है कि जिन पहचानकर्ताओं को मैं एक स्थान पर एक विलक्षण के रूप में परिभाषित करता हूं, उनका उपयोग अन्य स्थानों पर उनके बहुवचन रूपों में किया जाता है। उदाहरण के लिए, मैं कुछ इस तरह परिभाषित करना चाहता हूँ config/routes.rb:

  resource :dashboard, :only => [:show]

और फिर मैं एक नियंत्रक DashboardControllerको आवेदन की कुछ पहलुओं के बारे में सारांश जानकारी प्रदर्शित करना चाहता हूं , एक से अधिक डेटाबेस तालिका से जानकारी इकट्ठा करना। इसलिए यहां, Dashboardएप्लिकेशन के किसी भी मॉडल का उल्लेख नहीं किया गया है, और नियंत्रक का नाम होना अजीब होगाDashboardsController

मुझे इस उत्तर में स्वचालित बहुवचन की जलन का एक अच्छा समाधान मिला । संक्षेप में, फ़ाइल को संपादित करें config/initializers/inflections.rbऔर उन शब्दों को जोड़ें जिन्हें आप इस परिभाषा के लिए स्वचालित रूप से बहुल नहीं होना चाहते हैं:

ActiveSupport::Inflector.inflections do |inflect|
  inflect.uncountable %w( dashboard foo bar baz )
end

3

रेल में नियंत्रकों का नामकरण सम्मेलन नियंत्रक के नाम में अंतिम शब्द के बहुवचन का पक्षधर है , हालांकि यह कड़ाई से आवश्यक नहीं है (उदाहरण के लिए)ApplicationController )।

उदाहरण के लिए, ClientsControllerबेहतर है ClientController, SiteAdminsControllerबेहतर है SiteAdminControlleआर याSitesAdminsController , और इतने पर।

इस कन्वेंशन के बाद आप प्रत्येक :pathया अर्हता प्राप्त करने की आवश्यकता के बिना डिफ़ॉल्ट मार्ग जनरेटर (जैसे संसाधन, आदि) का उपयोग करने की अनुमति देगा:controller , और यूआरएल और पथ सहायकों के उपयोग अपने आवेदन में एक जैसा रखेंगे।

Ref: नियंत्रक नामकरण कन्वेंशन-रेल्स डॉक



2

यदि नियंत्रक एक संसाधन है तो यह बहुवचन होना चाहिए ...

उदाहरण के लिए

नियंत्रक

articles_controller.rb

नमूना

article.rb

लेकिन आप सिंगुलर कंट्रोलर नाम का उपयोग कर सकते हैं जब आपके पास इसके अनुरूप मॉडल नहीं होते हैं

welcome_controller.rb

1

प्लुरल का उपयोग करना बेहतर लगता है, और फिर यदि आपके पास एक नियंत्रक है जो एक विलक्षण संभोग को संभालता है, अर्थात उपयोगकर्ता है, तो आप अभी भी यूआरएल / उपयोगकर्ता का नाम दे सकते हैं।

सहायकों के साथ अक्सर हर नियंत्रक के लिए एक सहायक होने की आवश्यकता नहीं होती है, और अक्सर सहायक विधियाँ होंगी जिनमें आप कई नियंत्रक का उपयोग कर सकते हैं और अपने आवेदन सहायक के माध्यम से उन सभी को अलग-अलग कर सकते हैं, जैसे कि आप उन्हें कस्टम सहायकों में रख सकते हैं जैसे कि eg_helper या कोई भी अन्य अच्छी तरह से नामित फ़ाइल।


कैन बर्क गुडर के लिए भी इसी तरह की टिप्पणी। इसके अलावा, मुझे आपके अंतिम वाक्य / पैराग्राफ का अनुसरण करने में थोड़ी परेशानी हुई क्योंकि बहुत कम विराम चिह्न था!
अल्लौरकोड

1
इसके बारे में क्षमा करें, मेरा मतलब था कि चूक के उपयोग के बजाए कस्टम सहायकों को बनाना एक बेहतर विचार हो सकता है क्योंकि डिफ़ॉल्ट का नाम हमेशा पूरी तरह से कैप्चर नहीं होता है जहां वे उपयोग करने जा रहे हैं। यदि आपके पास कई सहायक विधियाँ हैं, जिनका उपयोग लेआउट के लिए किया जाएगा, तो इसे layout_helper कहें।
नाइटेकोडर
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.