Turbo

É uma boa prática colocar todos os seus métodos find nos models, disto todo mundo sabe. Se não sabe deveriar ler a tradução que o Akita fez do artigo "A dieta dos controller".

Neste artigo ele dá um exemplo assim:

[source:ruby]
module FindExtensions
def find_recentes
find(:all, :order => ‘created_at desc’)
end
end
[/source]

Faça um favor para seu código e projetos, leia o artigo do Akita.

Colocando na prática esta dieta, resolvi dar uma melhorada nos métodos que fui criando nos models.

A grande maioria dos programadores Ruby on Rails já conhece o método with_scope do ActiveRecord. Usando este recurso pode-se criar métodos de pesquisa e criação nos models sem perder a flexibilidade.

Podemos fazer algo bem simples, assim:

[source:ruby]
def find_recentes (options = {})
with_scope :find => options do
find(:all, :order => ‘created_at desc’)
end
end
[/source]

Com isto deixamos nossos controllers magrinhos, e ainda criamos métodos de pesquisa totalmente flexíveis. No caso acima poderíamos fazer algo assim em nosso controller:

[source:ruby]
find_ recentes :limit =: 20
[/source]

Assim teríamos o mesmo método de antes, mas agora trazendo apenas os 20 primeiros registros.