Ruby on Rails - Controller

Der Rails-Controller ist das logische Zentrum Ihrer Anwendung. Es koordiniert die Interaktion zwischen dem Benutzer, den Ansichten und dem Modell. Der Controller beherbergt auch eine Reihe wichtiger Nebendienstleistungen.

  • Es ist für die Weiterleitung externer Anforderungen an interne Aktionen verantwortlich. Es handhabt menschenfreundliche URLs sehr gut.

  • Es verwaltet das Caching, wodurch die Leistung der Anwendungen um Größenordnungen gesteigert werden kann.

  • Es verwaltet Hilfsmodule, die die Funktionen der Ansichtsvorlagen erweitern, ohne den Code zu vergrößern.

  • Es verwaltet Sitzungen und vermittelt den Benutzern den Eindruck einer kontinuierlichen Interaktion mit unseren Anwendungen.

Der Prozess zum Erstellen eines Controllers ist sehr einfach und ähnelt dem Prozess, den wir bereits zum Erstellen eines Modells verwendet haben. Wir werden hier nur einen Controller erstellen -

library\> rails generate controller Book

Beachten Sie, dass Sie Book groß schreiben und die Singularform verwenden. Dies ist ein Rails-Paradigma, dem Sie bei jeder Erstellung eines Controllers folgen sollten.

Dieser Befehl führt mehrere Aufgaben aus, von denen die folgenden hier relevant sind:

  • Es wird eine Datei mit dem Namen erstellt app/controllers/book_controller.rb

Wenn Sie sich book_controller.rb ansehen, finden Sie es wie folgt:

class BookController < ApplicationController
end

Controller-Klassen erben von ApplicationController, der anderen Datei im Controller-Ordner:application.rb.

Der ApplicationController enthält Code, der auf allen Ihren Controllern ausgeführt werden kann, und erbt von der Rails ActionController :: Base- Klasse.

Sie müssen sich noch nicht um den ApplicationController kümmern , also definieren wir einfach ein paar Methodenstubs inbook_controller.rb. Je nach Ihren Anforderungen können Sie in dieser Datei eine beliebige Anzahl von Funktionen definieren.

Ändern Sie die Datei wie folgt und speichern Sie Ihre Änderungen. Beachten Sie, dass es an Ihnen liegt, welchen Namen Sie diesen Methoden geben möchten, aber besser, relevante Namen zu vergeben.

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

Lassen Sie uns nun alle Methoden einzeln implementieren.

Implementieren der Listenmethode

Mit der Listenmethode erhalten Sie eine Liste aller Bücher in der Datenbank. Diese Funktionalität wird durch die folgenden Codezeilen erreicht. Bearbeiten Sie die folgenden Zeilen in der Datei book_controller.rb.

def list
   @books = Book.all
end

Die Zeile @books = Book.all in der Listenmethode weist Rails an, die Büchertabelle zu durchsuchen und jede gefundene Zeile im @ books-Instanzobjekt zu speichern.

Implementierung der Show-Methode

Die Show-Methode zeigt nur weitere Details zu einem einzelnen Buch an. Diese Funktionalität wird durch die folgenden Codezeilen erreicht.

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

Die Zeile @book = Book.find (params [: id]) der show-Methode weist Rails an, nur das Buch zu finden, dessen ID in params [: id] definiert ist.

Das params-Objekt ist ein Container, mit dem Sie Werte zwischen Methodenaufrufen übergeben können. Wenn Sie sich beispielsweise auf der von der Listenmethode aufgerufenen Seite befinden, können Sie auf einen Link für ein bestimmtes Buch klicken und die ID dieses Buches über das params-Objekt übergeben, damit show das bestimmte Buch finden kann.

Implementierung der neuen Methode

Die neue Methode teilt Rails mit, dass Sie ein neues Objekt erstellen. Fügen Sie dieser Methode einfach den folgenden Code hinzu.

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

Die obige Methode wird aufgerufen, wenn Sie dem Benutzer eine Seite zur Benutzereingabe anzeigen. In der zweiten Zeile werden alle Themen aus der Datenbank abgerufen und in ein Array mit dem Namen @subjects eingefügt.

Implementierung der Erstellungsmethode

Sobald Sie Benutzereingaben mithilfe des HTML-Formulars vorgenommen haben, ist es Zeit, einen Datensatz in der Datenbank zu erstellen. Um dies zu erreichen, bearbeiten Sie die Methode create in der Datei book_controller.rb so, dass sie mit den folgenden übereinstimmt:

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

In der ersten Zeile wird eine neue Instanzvariable mit dem Namen @book erstellt, die ein Book-Objekt enthält, das aus den vom Benutzer übermittelten Daten erstellt wurde. Dasbook_params Methode wird verwendet, um alle Felder vom Objekt zu sammeln :books. Die Daten wurden von der neuen Methode übergeben, um sie mit dem params-Objekt zu erstellen.

Die nächste Zeile ist eine bedingte Anweisung, die den Benutzer an weiterleitet listMethode, wenn das Objekt korrekt in der Datenbank gespeichert wird. Wenn es nicht gespeichert wird, wird der Benutzer zur neuen Methode zurückgeschickt. Die Methode redirect_to ähnelt der Durchführung einer Metaaktualisierung auf einer Webseite: Sie leitet Sie automatisch ohne Benutzerinteraktion an Ihr Ziel weiter.

Dann ist @subjects = Subject.all erforderlich, falls die Daten nicht erfolgreich gespeichert werden und der Fall ähnlich wird wie bei der neuen Option.

Implementieren der Bearbeitungsmethode

Die Bearbeitungsmethode sieht fast identisch mit der Show-Methode aus. Beide Methoden werden verwendet, um ein einzelnes Objekt anhand seiner ID abzurufen und auf einer Seite anzuzeigen. Der einzige Unterschied besteht darin, dass die Show-Methode nicht bearbeitet werden kann.

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

Diese Methode wird aufgerufen, um Daten auf dem Bildschirm anzuzeigen, die vom Benutzer geändert werden sollen. In der zweiten Zeile werden alle Themen aus der Datenbank abgerufen und in einem Array namens @subjects abgelegt.

Implementieren der Aktualisierungsmethode

Diese Methode wird nach der Bearbeitungsmethode aufgerufen, wenn der Benutzer Daten ändert und die Änderungen in der Datenbank aktualisieren möchte. Die Aktualisierungsmethode ähnelt der Erstellungsmethode und wird zum Aktualisieren vorhandener Bücher in der Datenbank verwendet.

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

Die update_attributes-Methode ähnelt der von create verwendeten Speichermethode, überschreibt jedoch nicht die Attribute einer vorhandenen Zeile, sondern überschreibt die Attribute der vorhandenen Zeile.

Dann ist die Zeile @subjects = Subject.all erforderlich, falls die Daten nicht erfolgreich gespeichert werden, und ähnelt dann der Bearbeitungsoption.

Implementierung der Löschmethode

Wenn Sie einen Datensatz aus der Datenbank löschen möchten, verwenden Sie diese Methode. Implementieren Sie diese Methode wie folgt.

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

In der ersten Zeile wird die Klassifizierung anhand des über das params-Objekt übergebenen Parameters ermittelt und anschließend mit der Methode destroy gelöscht. Die zweite Zeile leitet den Benutzer mithilfe eines redirect_to-Aufrufs zur Listenmethode weiter.

Zusätzliche Methoden zum Anzeigen von Motiven

Angenommen, Sie möchten Ihren Benutzern die Möglichkeit geben, alle Bücher zu einem bestimmten Thema zu durchsuchen. Sie können also in book_controller.rb eine Methode erstellen, um alle Themen anzuzeigen. Angenommen, der Methodenname lautetshow_subjects - -

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

Endlich dein book_controller.rb Datei wird wie folgt aussehen -

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

Speichern Sie nun Ihre Controller-Datei.

Was kommt als nächstes?

Sie haben fast alle Methoden erstellt, die im Backend funktionieren. Als nächstes definieren wir Routen (URLs) für Aktionen.