Torne seus métodos de pesquisa mais poderosos

13 de julho de 2007  |  Ruby on Rails  | 

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.


4 Comentários


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

  2. Faltou a chamada no meu model né:
    def self.find_recents
    recents = find_recents(
    :all,
    :include => [:mark,:color,:user],
    :conditions => ["vehicles.situation 'I'"],
    :limit => 7)
    end

  3. Davis, não consegui entender… você resolveu?

  4. Não resolvi não.
    Acusa esse problema de 2 argumentos onde não existe nenhum.

    Coisa louca haha! :-)

Trackbacks

  1. Nome do Jogo » Blog Archive » Torne seus métodos de pesquisa menos poderosos

Deixe um comentário