Ruby on Rails - Contrôleur

Le contrôleur Rails est le centre logique de votre application. Il coordonne l'interaction entre l'utilisateur, les vues et le modèle. Le contrôleur héberge également un certain nombre de services auxiliaires importants.

  • Il est responsable de l'acheminement des requêtes externes vers les actions internes. Il gère extrêmement bien les URL conviviales.

  • Il gère la mise en cache, ce qui peut améliorer les performances des applications.

  • Il gère les modules d'assistance, qui étendent les capacités des modèles de vue sans gonfler leur code.

  • Il gère les sessions, donnant aux utilisateurs l'impression d'une interaction continue avec nos applications.

Le processus de création d'un contrôleur est très simple et il est similaire au processus que nous avons déjà utilisé pour créer un modèle. Nous allons créer un seul contrôleur ici -

library\> rails generate controller Book

Notez que vous mettez Book en majuscule et que vous utilisez la forme singulière. Il s'agit d'un paradigme Rails que vous devez suivre chaque fois que vous créez un contrôleur.

Cette commande accomplit plusieurs tâches, dont les suivantes sont pertinentes ici -

  • Il crée un fichier appelé app/controllers/book_controller.rb

Si vous regardez book_controller.rb, vous le trouverez comme suit -

class BookController < ApplicationController
end

Les classes de contrôleur héritent d' ApplicationController, qui est l'autre fichier dans le dossier des contrôleurs:application.rb.

L' ApplicationController contient du code qui peut être exécuté dans tous vos contrôleurs et hérite de la classe Rails ActionController :: Base .

Vous n'avez pas besoin de vous inquiéter avec ApplicationController pour le moment, définissons donc simplement quelques stubs de méthode dansbook_controller.rb. En fonction de vos besoins, vous pouvez définir n'importe quel nombre de fonctions dans ce fichier.

Modifiez le fichier pour qu'il ressemble à ce qui suit et enregistrez vos modifications. Notez que c'est à vous de choisir le nom que vous souhaitez donner à ces méthodes, mais mieux vaut donner des noms pertinents.

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

Maintenant, implémentons toutes les méthodes une par une.

Implémentation de la méthode list

La méthode list vous donne une liste de tous les livres de la base de données. Cette fonctionnalité sera réalisée par les lignes de code suivantes. Modifiez les lignes suivantes dans le fichier book_controller.rb.

def list
   @books = Book.all
end

La ligne @books = Book.all de la méthode list indique à Rails de rechercher la table books et de stocker chaque ligne trouvée dans l'objet d'instance @books.

Implémentation de la méthode show

La méthode show n'affiche que des détails supplémentaires sur un seul livre. Cette fonctionnalité sera réalisée par les lignes de code suivantes.

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

La ligne @book = Book.find (params [: id]) de la méthode show indique à Rails de ne trouver que le livre dont l'ID est défini dans params [: id].

L'objet params est un conteneur qui vous permet de transmettre des valeurs entre les appels de méthode. Par exemple, lorsque vous êtes sur la page appelée par la méthode list, vous pouvez cliquer sur un lien pour un livre spécifique, et il transmet l'ID de ce livre via l'objet params afin que show puisse trouver le livre spécifique.

Mettre en œuvre la nouvelle méthode

La nouvelle méthode informe Rails que vous allez créer un nouvel objet. Alors ajoutez simplement le code suivant dans cette méthode.

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

La méthode ci-dessus sera appelée lorsque vous afficherez une page à l'utilisateur pour qu'il accepte les entrées de l'utilisateur. Ici, la deuxième ligne saisit tous les sujets de la base de données et les place dans un tableau appelé @subjects.

Implémentation de la méthode create

Une fois que vous prenez l'entrée utilisateur à l'aide du formulaire HTML, il est temps de créer un enregistrement dans la base de données. Pour ce faire, modifiez la méthode create dans le book_controller.rb pour qu'elle corresponde à ce qui suit -

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

La première ligne crée une nouvelle variable d'instance appelée @book qui contient un objet Book construit à partir des données soumises par l'utilisateur. lebook_params méthode est utilisée pour collecter tous les champs de l'objet :books. Les données ont été transmises à partir de la nouvelle méthode pour créer à l'aide de l'objet params.

La ligne suivante est une instruction conditionnelle qui redirige l'utilisateur vers le listméthode si l'objet est correctement enregistré dans la base de données. S'il ne sauvegarde pas, l'utilisateur est renvoyé vers la nouvelle méthode. La méthode redirect_to est similaire à l'exécution d'un méta-rafraîchissement sur une page Web: elle vous redirige automatiquement vers votre destination sans aucune interaction de l'utilisateur.

Ensuite, @subjects = Subject.all est requis au cas où il ne sauvegarde pas les données avec succès et cela devient le cas similaire à celui d'une nouvelle option.

Implémentation de la méthode d'édition

La méthode d'édition est presque identique à la méthode show. Les deux méthodes sont utilisées pour récupérer un seul objet en fonction de son identifiant et l'afficher sur une page. La seule différence est que la méthode show n'est pas modifiable.

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

Cette méthode sera appelée pour afficher des données sur l'écran à modifier par l'utilisateur. La deuxième ligne saisit tous les sujets de la base de données et les place dans un tableau appelé @subjects.

Implémentation de la méthode de mise à jour

Cette méthode sera appelée après la méthode d'édition, lorsque l'utilisateur modifie une donnée et souhaite mettre à jour les modifications dans la base de données. La méthode de mise à jour est similaire à la méthode de création et sera utilisée pour mettre à jour les livres existants dans la base de données.

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

La méthode update_attributes est similaire à la méthode save utilisée par create mais au lieu de créer une nouvelle ligne dans la base de données, elle écrase les attributs de la ligne existante.

Ensuite, la ligne @subjects = Subject.all est requise au cas où elle ne sauvegarde pas les données avec succès, elle devient similaire à l'option d'édition.

Implémentation de la méthode de suppression

Si vous souhaitez supprimer un enregistrement de la base de données, vous utiliserez cette méthode. Implémentez cette méthode comme suit.

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

La première ligne trouve le classifié en fonction du paramètre passé via l'objet params, puis le supprime à l'aide de la méthode destroy. La deuxième ligne redirige l'utilisateur vers la méthode list à l'aide d'un appel redirect_to.

Méthodes supplémentaires pour afficher les sujets

Supposons que vous souhaitiez donner à vos utilisateurs la possibilité de parcourir tous les livres en fonction d'un sujet donné. Ainsi, vous pouvez créer une méthode dans book_controller.rb pour afficher tous les sujets. Supposons que le nom de la méthode estshow_subjects -

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

Enfin votre book_controller.rb le fichier ressemblera à ceci -

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

Maintenant, enregistrez votre fichier de contrôleur.

Quelle est la prochaine?

Vous avez créé presque toutes les méthodes, qui fonctionneront sur le backend. Ensuite, nous définirons des routes (URL) pour les actions.