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