
É 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.
5 Comentários em "Torne seus métodos de pesquisa mais poderosos"
Mano, fui fazer isso que tu mostrou ae e não deu certo.
Recebo o seguinte erro:
wrong number of arguments (2 for 0)Saca meu arquivo:
def find_recents (options = {})with_scope :find => options do
find(:all, :order => 'created_at desc')
end
end
def find_more_visited (options = {})
with_scope :find => options do
find(:all, :order => 'hits desc')
end
end
Faltou a chamada no meu model né:
def self.find_recentsrecents = find_recents(
:all,
:include => [:mark,:color,:user],
:conditions => ["vehicles.situation 'I'"],
:limit => 7)
end
Davis, não consegui entender… você resolveu?
Não resolvi não.
Acusa esse problema de 2 argumentos onde não existe nenhum.
Coisa louca haha!
[...] um post mais antigo citei um exemplo de uso do método with_scope. Hoje enfrentei um caso onde eu queria fazer [...]
Deixe o seu comentário!