रूबी ऑन रेल्स - कंट्रोलर

रेल नियंत्रक आपके आवेदन का तार्किक केंद्र है। यह उपयोगकर्ता, विचार और मॉडल के बीच की बातचीत का समन्वय करता है। नियंत्रक कई महत्वपूर्ण सहायक सेवाओं का एक घर भी है।

  • यह आंतरिक अनुरोधों के लिए बाहरी अनुरोधों को रूट करने के लिए जिम्मेदार है। यह लोगों के अनुकूल URL को बहुत अच्छी तरह से संभालता है।

  • यह कैशिंग का प्रबंधन करता है, जो अनुप्रयोगों के आदेश-परिमाण प्रदर्शन को बढ़ावा दे सकता है।

  • यह हेल्पर मॉड्यूल का प्रबंधन करता है, जो अपने कोड को उभारे बिना व्यू टेम्प्लेट की क्षमताओं का विस्तार करता है।

  • यह सत्रों का प्रबंधन करता है, जिससे उपयोगकर्ताओं को हमारे अनुप्रयोगों के साथ चल रही बातचीत का आभास होता है।

एक नियंत्रक बनाने के लिए प्रक्रिया बहुत आसान है, और यह उस प्रक्रिया के समान है जो हमने पहले ही एक मॉडल बनाने के लिए उपयोग किया है। हम यहां सिर्फ एक कंट्रोलर बनाएंगे -

library\> rails generate controller Book

ध्यान दें कि आप बुक को कैपिटलाइज़ कर रहे हैं और एकवचन फॉर्म का उपयोग कर रहे हैं। यह एक रेल प्रतिमान है जिसे आपको नियंत्रक बनाते समय हर बार पालन करना चाहिए।

यह आदेश कई कार्यों को पूरा करता है, जिनमें से निम्नलिखित यहां प्रासंगिक हैं -

  • यह नामक एक फाइल बनाता है app/controllers/book_controller.rb

यदि आप book_controller.rb को देखते हैं, तो आप इसे इस प्रकार पाएंगे -

class BookController < ApplicationController
end

कंट्रोलर क्लासेस को ApplicationController से विरासत में मिला है , जो कंट्रोलर फ़ोल्डर की दूसरी फाइल है:application.rb

ApplicationController कि आपके सभी नियंत्रकों में चलाया जा सकता है कोड होता है और यह रेल से विरासत ActionController :: बेस वर्ग।

आपको अभी तक ApplicationController के साथ चिंता करने की ज़रूरत नहीं है, तो चलो बस कुछ विधि स्टब्स को परिभाषित करते हैंbook_controller.rb। अपनी आवश्यकता के आधार पर, आप इस फ़ाइल में किसी भी फ़ंक्शन को परिभाषित कर सकते हैं।

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

class BookController < ApplicationController
   def list
   end
   
   def show
   end
   
   def new
   end
   
   def create
   end
   
   def edit
   end
   
   def update
   end
   
   def delete
   end
   
end

अब हम एक-एक करके सभी विधियों को लागू करते हैं।

सूची विधि को लागू करना

सूची विधि आपको डेटाबेस की सभी पुस्तकों की एक सूची प्रदान करती है। यह कार्यक्षमता कोड की निम्न पंक्तियों द्वारा प्राप्त की जाएगी। निम्नलिखित पंक्तियों को book_controller.rb फ़ाइल में संपादित करें।

def list
   @books = Book.all
end

@Books = Book.all सूची विधि में लाइन किताबें तालिका खोज और प्रत्येक पंक्ति यह @books उदाहरण वस्तु में पाता है स्टोर करने के लिए रेल बताता है।

शो विधि लागू करना

शो विधि एकल पुस्तक पर केवल और अधिक विवरण प्रदर्शित करती है। यह कार्यक्षमता कोड की निम्न पंक्तियों द्वारा प्राप्त की जाएगी।

def show
   @book = Book.find(params[:id])
end

शो विधि की @book = Book.find (params [: id]) लाइन रेल्स को केवल उस पुस्तक को खोजने के लिए कहती है जिसमें आईडी को params [: id] में परिभाषित किया गया है।

परमेस ऑब्जेक्ट एक कंटेनर है जो आपको विधि कॉल के बीच मानों को पारित करने में सक्षम बनाता है। उदाहरण के लिए, जब आप सूची विधि द्वारा बुलाए गए पृष्ठ पर होते हैं, तो आप किसी विशिष्ट पुस्तक के लिए लिंक पर क्लिक कर सकते हैं, और यह उस पुस्तक की आईडी को पाराम्स ऑब्जेक्ट के माध्यम से पास करता है ताकि शो विशिष्ट पुस्तक को खोज सके।

नई विधि को लागू करना

नई विधि रेल्स को बताती है कि आप एक नई वस्तु बनाएंगे। तो बस इस विधि में निम्नलिखित कोड जोड़ें।

def new
   @book = Book.new
   @subjects = Subject.all
end

जब आप उपयोगकर्ता इनपुट लेने के लिए उपयोगकर्ता को एक पृष्ठ प्रदर्शित करेंगे, तो उपरोक्त विधि को बुलाया जाएगा। यहां दूसरी पंक्ति डेटाबेस से सभी विषयों को पकड़ती है और @subjects नामक एक सरणी में डालती है।

बनाने की विधि को लागू करना

एक बार जब आप HTML फॉर्म का उपयोग करके उपयोगकर्ता इनपुट लेते हैं, तो डेटाबेस में रिकॉर्ड बनाने का समय आ जाता है। इसे प्राप्त करने के लिए, निम्नलिखित से मिलान करने के लिए book_controller.rb में बनाएँ विधि को संपादित करें -

def create
   @book = Book.new(book_params)
	
   if @book.save
      redirect_to :action => 'list'
   else
      @subjects = Subject.all
      render :action => 'new'
   end
   
end

def book_params
   params.require(:books).permit(:title, :price, :subject_id, :description)
end

पहली पंक्ति में @ बुक नामक एक नया इंस्टेंस वेरिएबल है जो डेटा से निर्मित बुक ऑब्जेक्ट रखता है, जिसे यूजर ने सबमिट किया है। book_params विधि का उपयोग वस्तु से सभी क्षेत्रों को इकट्ठा करने के लिए किया जाता है :books। डेटा को परमेस ऑब्जेक्ट का उपयोग करने के लिए नई विधि से पारित किया गया था।

अगली पंक्ति एक सशर्त विवरण है जो उपयोगकर्ता को रीडायरेक्ट करता है listविधि यदि ऑब्जेक्ट डेटाबेस में सही ढंग से बचाता है। यदि यह सहेजता नहीं है, तो उपयोगकर्ता को नई विधि में वापस भेजा जाता है। रीडायरेक्ट_टो विधि एक वेब पेज पर मेटा रीफ्रेश करने के समान है: यह स्वचालित रूप से आपको बिना किसी उपयोगकर्ता सहभागिता के आपकी मंजिल तक पहुंचाता है।

तब @subjects = Subject.all की आवश्यकता होती है यदि यह डेटा को सफलतापूर्वक सहेजता नहीं है और नए विकल्प के साथ भी ऐसा ही हो जाता है।

संपादन विधि को लागू करना

शो मेथड शो विधि के समान है। दोनों तरीकों का उपयोग इसकी आईडी के आधार पर किसी एक वस्तु को प्राप्त करने और एक पृष्ठ पर प्रदर्शित करने के लिए किया जाता है। अंतर केवल इतना है कि शो विधि संपादन योग्य नहीं है।

def edit
   @book = Book.find(params[:id])
   @subjects = Subject.all
end

इस पद्धति को उपयोगकर्ता द्वारा संशोधित किए जाने के लिए स्क्रीन पर डेटा प्रदर्शित करने के लिए बुलाया जाएगा। दूसरी पंक्ति डेटाबेस से सभी विषयों को पकड़ती है और @subjects नामक एक सरणी में डालती है।

अद्यतन विधि को लागू करना

यह विधि संपादन विधि के बाद कहलाएगी, जब उपयोगकर्ता किसी डेटा को संशोधित करता है और डेटाबेस में परिवर्तन को अद्यतन करना चाहता है। अद्यतन विधि बनाने की विधि के समान है और इसका उपयोग डेटाबेस में मौजूदा पुस्तकों को अद्यतन करने के लिए किया जाएगा।

def update
   @book = Book.find(params[:id])
	
   if @book.update_attributes(book_param)
      redirect_to :action => 'show', :id => @book
   else
      @subjects = Subject.all
      render :action => 'edit'
   end
   
end

def book_param
   params.require(:book).permit(:title, :price, :subject_id, :description)
end

Update_attributes विधि बनाने के लिए उपयोग की गई बचत विधि के समान है, लेकिन डेटाबेस में एक नई पंक्ति बनाने के बजाय, यह मौजूदा पंक्ति की विशेषताओं को अधिलेखित करती है।

तब @subjects = Subject.all लाइन की आवश्यकता होती है यदि यह डेटा को सफलतापूर्वक सहेज नहीं पाता है, तो यह संपादन विकल्प के समान हो जाता है।

डिलीट मेथड को लागू करना

यदि आप डेटाबेस से कोई रिकॉर्ड हटाना चाहते हैं तो आप इस विधि का उपयोग करेंगे। इस विधि को इस प्रकार लागू करें।

def delete
   Book.find(params[:id]).destroy
   redirect_to :action => 'list'
end

पहली पंक्ति पैरामीटर ऑब्जेक्ट के माध्यम से पारित पैरामीटर के आधार पर वर्गीकृत को ढूंढती है और फिर नष्ट विधि का उपयोग करके इसे हटा देती है। दूसरी पंक्ति उपयोगकर्ता को पुनर्निर्देश_ कॉल का उपयोग करके सूची विधि में पुनर्निर्देशित करती है।

अतिरिक्त तरीके प्रदर्शित करने के लिए विषय

मान लें कि आप किसी विषय पर आधारित सभी पुस्तकों को ब्राउज़ करने के लिए अपने उपयोगकर्ताओं को एक सुविधा देना चाहते हैं। इसलिए, आप सभी विषयों को प्रदर्शित करने के लिए book_controller.rb के अंदर एक विधि बना सकते हैं। विधि नाम मान लिया गया हैshow_subjects -

def show_subjects
   @subject = Subject.find(params[:id])
end

अंत में आपका book_controller.rb फ़ाइल निम्नानुसार दिखाई देगी -

class BooksController < ApplicationController

   def list
      @books = Book.all
   end

   def show
      @book = Book.find(params[:id])
   end
  
   def new
      @book = Book.new
      @subjects = Subject.all
   end

   def book_params
      params.require(:books).permit(:title, :price, :subject_id, :description)
   end

   def create
      @book = Book.new(book_params)

      if @book.save
         redirect_to :action => 'list'
      else
         @subjects = Subject.all
         render :action => 'new'
      end
   end
   
   def edit
      @book = Book.find(params[:id])
      @subjects = Subject.all
   end
   
   def book_param
      params.require(:book).permit(:title, :price, :subject_id, :description)
   end
   
   def update
      @book = Book.find(params[:id])
      
      if @book.update_attributes(book_param)
         redirect_to :action => 'show', :id => @book
      else
         @subjects = Subject.all
         render :action => 'edit'
      end
   end
   
   def delete
      Book.find(params[:id]).destroy
      redirect_to :action => 'list'
   end
   
   def show_subjects
      @subject = Subject.find(params[:id])
   end

end

अब अपनी कंट्रोलर फाइल को सेव करें।

आगे क्या है?

आपने लगभग सभी तरीके बनाए हैं, जो बैकएंड पर काम करेंगे। आगे हम क्रियाओं के लिए मार्गों (URL) को परिभाषित करेंगे।