Ci-dessous nous avons un modèle Task et nous allons exécuter la méthode find sur ce modèle.
class TaskController < ApplicationController
def index
@tasks = Task.find_all_by_complete(:false, :order => "created_at DESC")
end
end
Si la méthode find est exécutée plusieurs fois tout au long de l'application alors il y aura duplication. Une façon de supprimer cette duplication est de déplacer la méthode find dans le modèle ce qui nous permettra d'appeler
@tasks = Task.find_incomplete
dans le contrôleur. Pour faire ceci, nous aurons besoin de créer une nouvelle méthode dans le modèle. La méthode doit être une méthode de classe et doit donc commencer par self.
class Task < ActiveRecord::Base
belongs_to :project
def self.find_incomplete
find_all_by_complete(:false, :order => "created_at DESC")
end
end
Il n'y a pas besoin de spécifier Task dans la ligne du find puisque le find est déjà dan le champ de la classe Task. Maintenant vous pouvez appeler Task.find_incomplete dès que vous en avez besoin pour exécuter ce find. Ceci fonctionnera même avec les associations donc vous pouvez trouver les tâches incomplètes d'un projet de la façon suivante :
class ProjectsController < ApplicationController
def show
@project = Project.find(params[:id])
@tasks = @project.tasks.find_incomplete
end
end