खोज…


नियंत्रकों

नियंत्रक वर्ग के नाम बहुवचन हैं। कारण यह है कि नियंत्रक वस्तु के कई उदाहरणों को नियंत्रित करता है।

उदाहरण के लिए : 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


Modified text is an extract of the original Stack Overflow Documentation
के तहत लाइसेंस प्राप्त है CC BY-SA 3.0
से संबद्ध नहीं है Stack Overflow