Finalmente a série de artigos cobrindo todas as novas funcionalidades do Rails 2.2 terminou, e de agora em diante somente novas adições serão cobertas. Não sabemos ao certo se a próxima versão do Rails será a 2.3 ou 3.0, mas aqui chamaremos apenas de Edge Rails.
Outra novidade neste blog foi a adição do Google Connect. Vocês podem encontrar na primeira página uma caixa para se cadastrar no menu lateral. Ainda não inclui todas funcionalidades, até o momento é possível apenas se associar ao blog, mas futuramente serão permitidos comentários via esta ferramenta, além de outros tipos de colaboração. A idéia no momento é apenas testar ferramenta.
Vamos ao que realmente interessa. No Rails 2.1 tivemos a introdução dos named_scope, que se tornaram ferramentas poderosas em nossas mãos. Mas na próxima versão do Rails teremos também um default_scope.
Ele funciona exatamente como um named_scope, mas como o próprio nome diz é um escopo padrão que deve ser usado em todas as pesquisas. Vejamos alguns exemplos:
end
No exemplo acima estou definindo o escopo padrão para o meu objeto Person. Veja o resultado de uma simples pesquisa por todos os registros no banco de dados:
Person.all
# => Person.find(:all, :order => 'last_name, first_name')
Isto também vale para minhas associações:
end
Company.find(1).people
# => Person.find(:all, :order => 'last_name, first_name', :conditions => { :company_id => 1 })
Caso seu modelo possua named_scopes, eles também incluirão as condições impostas pelo default_scope, à menos que você sobrecarregue a condição existente com alguma outra (informando uma outra ordem no exemplo acima).
Para executar uma pesquisa desconsiderando o default_scope, você deve fazer uso do método with_exclusive_scope:
Person.with_exclusive_scope {find(:all) }
# => Person.find(:all)
Todos os exemplos dados aqui funcionarão somente no Ruby on Rails 2.3/3.0 ou superior. Você pode encontrar mais detalhes sobre esta e outras novidades acompanhando a série Edge Rails.