
É 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.