Ruby on Rails
नामकरण की परंपरा
खोज…
नियंत्रकों
नियंत्रक वर्ग के नाम बहुवचन हैं। कारण यह है कि नियंत्रक वस्तु के कई उदाहरणों को नियंत्रित करता है।
उदाहरण के लिए : orders
तालिका के लिए OrdersController
नियंत्रक होगा। रेल तब /app/controllers
निर्देशिका में orders_controller.rb
नामक फ़ाइल में वर्ग परिभाषा की orders_controller.rb
।
उदाहरण के लिए : PostsController
एक posts
टेबल के लिए नियंत्रक होगा।
यदि नियंत्रक वर्ग के नाम में कई पूंजीकृत शब्द हैं, तो तालिका का नाम इन शब्दों के बीच अंडरस्कोर होता है।
उदाहरण के लिए: एक नियंत्रक के नाम पर है, तो PendingOrdersController
तो इस नियंत्रक के लिए ग्रहण नाम होगा pending_orders_controller.rb
।
मॉडल
मॉडल को मिश्रित मिश्रित के वर्ग नामकरण सम्मेलन का उपयोग करके नाम दिया गया है और हमेशा तालिका नाम का एकवचन होता है।
उदाहरण के लिए : यदि किसी तालिका का नाम orders
था, तो संबंधित मॉडल का नाम Order
उदाहरण के लिए : यदि किसी तालिका का नाम posts
, तो संबंधित मॉडल को Post
नाम दिया जाएगा
उसके बाद रेल order.rb
/app/models
डायरेक्टरी में order.rb
. order.rb
नामक फाइल में क्लास की परिभाषा order.rb
।
यदि मॉडल वर्ग के नाम में कई पूंजीकृत शब्द हैं, तो तालिका का नाम इन शब्दों के बीच अंडरस्कोर होता है।
उदाहरण के लिए: यदि किसी मॉडल का नाम BlogPost
तो मान लिया गया कि टेबल का नाम blog_posts
होगा।
दृश्य और लेआउट
जब एक नियंत्रक क्रिया प्रदान की जाती है, तो रेल नियंत्रक के नाम के आधार पर मिलान लेआउट और दृश्य खोजने का प्रयास करेगा।
दृश्य और लेआउट app/views
डायरेक्टरी में रखे गए हैं।
PeopleController#index
क्रिया के अनुरोध को देखते हुए, रेल PeopleController#index
:
- लेआउट कहा जाता है
people
मेंapp/views/layouts/
(याapplication
करता है, तो कोई मुकाबला नहीं पाया जाता है) -
app/views/people/
डिफ़ॉल्ट रूप सेindex.html.erb
नामक एक दृश्य - यदि आप
index_new.html.erb
नामक अन्य फ़ाइल को रेंडर करना चाहते हैं, तो आपकोPeopleController#index
एक्शन जैसेrender 'index_new'
के लिए कोड लिखनाrender 'index_new'
- हम
render 'index_new', layout: 'your_layout_name'
लिखकर हरaction
लिए अलग-अलगlayouts
सेट कर सकते हैं।
फ़ाइलनाम और ऑटोलॉडिंग
रेल फाइलें - और सामान्य रूप से रूबी फाइलें - lower_snake_case
फ़ाइल नाम के साथ नामित की जानी चाहिए। उदाहरण के लिए
app/controllers/application_controller.rb
वह फ़ाइल है जिसमें ApplicationController
वर्ग की परिभाषा है। ध्यान दें कि क्लास और मॉड्यूल के नामों के लिए PascalCase
का उपयोग किया जाता है, लेकिन जिस फाइल में वे रहते हैं, वह अभी भी lower_snake_case
होनी चाहिए।
लगातार नामकरण महत्वपूर्ण के बाद से रेल की जरूरत के रूप में स्वत: लोड हो रहा है फ़ाइलों का उपयोग करता है, और का उपयोग करता है "मोड़" इस तरह के बदलने के रूप में अलग नामकरण शैलियों, के बीच बदलने के लिए है application_controller
को ApplicationController
और फिर से वापस।
जैसे अगर रेल देखता है कि BlogPost
वर्ग मौजूद नहीं है (अभी तक लोड नहीं किया गया है), तो यह एक फ़ाइल के लिए दिखेगा जिसका नाम blog_post.rb
और उस फाइल को लोड करने का प्रयास किया जाता है।
इसलिए यह जरूरी है कि फाइलों में वे नाम हों, जिनके लिए ऑटोलैडर को सामग्री से मिलान करने के लिए फाइल नामों की अपेक्षा है। अगर, उदाहरण के लिए, blog_post.rb
में केवल Post
नाम की एक क्लास शामिल है, तो आपको Expected [some path]/blog_post.rb to define BlogPost
एक LoadError
: Expected [some path]/blog_post.rb to define BlogPost
।
यदि आप app/something/
(जैसे / मॉडल / उत्पाद /), और के तहत एक डीआईआर जोड़ते हैं
- नए dir के अंदर नेमस्पेस और क्लासेस को नाम देना चाहते हैं तो आपको कुछ भी करने की आवश्यकता नहीं है और इसे स्वयं लोड करना होगा। उदाहरण के लिए,
app/models/products/ you would need to wrap your class in
मॉड्यूलapp/models/products/ you would need to wrap your class in
। - मेरे नए डीआईआर के अंदर नेमस्पेस और क्लासेस का नाम नहीं लेना चाहते हैं, तो आपको autoload में अपने
application.rb
config.autoload_paths += %W( #{config.root}/app/models/products )
को जोड़नाconfig.autoload_paths += %W( #{config.root}/app/models/products )
।
एक और बात पर ध्यान देना (विशेषकर यदि अंग्रेजी आपकी पहली भाषा नहीं है) तथ्य यह है कि रेल अंग्रेजी में अनियमित बहुवचन संज्ञाओं के लिए जिम्मेदार है। यदि आपके पास "Foot" नाम का मॉडल है, तो संबंधित नियंत्रक को "FootCController" के बजाय "FootCController" कहा जाना चाहिए, यदि आप रेल "जादू" रूटिंग (और कई और अधिक सुविधाओं) को काम करना चाहते हैं।
नियंत्रक नाम से मॉडल वर्ग
आप इस तरह से एक नियंत्रक नाम से एक मॉडल वर्ग प्राप्त कर सकते हैं (संदर्भ नियंत्रक वर्ग है):
class MyModelController < ActionController::Base
# Returns corresponding model class for this controller
# @return [ActiveRecord::Base]
def corresponding_model_class
# ... add some validation
controller_name.classify.constantize
end
end