Os famosos has_one e belongs_to acabam de receber mais uma opção, o já conhecido :select.
Por padrão esta opção é o “*” do SELECT * FROM, mas você pode mudar isto e recuperar somente as colunas que serão usadas, ou sei lá… use sua imaginação.
Só um detalhe, não esqueça de colocar a primary e as foreign keys, senão você terá um lindo erro.
Outra alteração é que a opção :order do belongs_to foi removida. Eu nem sabia que ela existia… aliás ela nem servia para nada mesmo.
Hahahaha!
Sem querer ser chato, esse foi meu também! =)
Mas foi o último (por enquanto)! ;)
Esse é de especial importância, porque o Pagestacker guarda o conteúdo das páginas crawleadas no banco de dados e trazer esse conteúdo quando só queremos a url, adiciona uma carga desnecessária.
O que vale citar, é que o :select só funciona com queries “simples”, porque usa a feature de preload associations do Rails 2 (as associações são carregadas em queries separadas). Por exemplo:
class Bookmark ‘id, url’
end
Bookmark.all(:include => :page)
O último comando busca primeiro todos os bookmarks e depois faz outra query para buscar as “pages” dos bookmarks (no seu log que terá duas queries).
Se você fizer algo como:
Bookmark.all(:include => :page, :conditions => ‘pages.indexed_at IS NOT NULL’)
O Rails vai trazer tudo em uma query só, já que nesse caso ele faz referência entre as tabelas e portanto o :select não funciona, porque o Rails o sobrescreve (comportamento igual ao Rails 1.x).
No código acima, leiam:
class Bookmark < ActiveRecord::Base
belongs_to :page, :select => ‘id,url’
end
E Carlos, para não me estender muito aqui, eu continuei o meu raciocínio no meu blog:
http://josevalim.blogspot.com/2008/05/rails-e-patches.html
;)
Excelente!