Poniżej mamy model Task (Zadanie) i wywołujemy metodę find (szukaj) na tym modelu.
class TaskController < ApplicationController
def index
@tasks = Task.find_all_by_complete(:false, :order => "created_at DESC")
end
end
Jeśli metoda find jest wywołana klika razy w aplikacji, występuje wtedy efekt duplikacji. Jednym ze sposobów wyeliminowania duplikacji jest przeniesienie metody find do modelu, który możemy wywołać poprzez
@tasks = Task.find_incomplete
w kontrolerze. Aby można było tak zrobić musimy stworzyć nową metodę w modelu. Metoda musi być metodą klasową, w związku z tym, nazwę metody musimy poprzedzić słowem self.
class Task < ActiveRecord::Base
belongs_to :project
def self.find_incomplete
find_all_by_complete(:false, :order => "created_at DESC")
end
end
Nie ma potrzeby używać słowa Task (Zadanie) przed metodą find, ponieważ w klasie Task (Zadanie) metoda find jest automatycznie ograniczana dla tej klasy. Teraz możesz wywołać Task.find_incomplete, w momencie kiedy chcesz wywołać, wspomnianą w tym epizodzie, metodę find. Będzie to działać nawet z relacjami, więc możesz znaleźć niekompletne zadania projektu w ten sposób:
class ProjectsController < ApplicationController
def show
@project = Project.find(params[:id])
@tasks = @project.tasks.find_incomplete
end
end