He revisado las fuentes de Arel y algunas de las fuentes ActiveRecord para Rails 3.0, pero parece que no puedo obtener una buena respuesta para mí sobre si Arel cambiará nuestra capacidad de usar includes(), cuando construyendo consultas, para mejor.¿Cómo afectará ActiveRelation a las capacidades de include() de rieles?
Hay casos en los que uno podría querer modificar las condiciones en un registro activo: incluir consulta en 2.3.5 y antes, para los registros de asociación que serían devueltos. Pero hasta donde yo sé, esto no es programáticamente defendible para todos: incluye consultas:
(sé que AR-find-includes make t # {n} .C# {m} cambia el nombre de todos los atributos, y podría agregar condiciones a estas consultas para limitar los resultados de los conjuntos combinados, pero otros hacen n_joins + 1 número de consultas sobre los conjuntos de identificadores iterativamente, y no estoy seguro de cómo se podría hackear AR para editar estas consultas iteradas.)
Will Arel nos permite construir consultas ActiveRecord que especifican los objetos de modelo asociados resultantes al usar includes()?
Ex:
User :has_many posts(has_many :comments)
User.all(:include => :posts) #say I wanted the post objects to have their
#comment counts loaded without adding a comment_count column to `posts`.
#At the post level, one could do so by:
posts_with_counts = Post.all(:select => 'posts.*, count(comments.id) as comment_count',
:joins => 'left outer join comments on comments.post_id = posts.id',
:group_by => 'posts.id') #i believe
#But it seems impossible to do so while linking these post objects to each
#user as well, without running User.all() and then zippering the objects into
#some other collection (ugly)
#OR running posts.group_by(&:user) (even uglier, with the n user queries)
Steven Xu efectivamente hizo mi pregunta en su forma más básica. http://stackoverflow.com/questions/4908878/how-do-i-get-rails-to-eager-load-counts –