Estoy utilizando: une y selecciona opciones si solo necesita mostrar datos. Encontré muy útil named_scope para definir todo lo posible: joins y uno: select_columns named_scope.Ejemplo
class Activity < ActiveRecord::Base
belongs_to :event
belongs_to :html_template
has_many :participants
named_scope :join_event, :joins => :event
named_scope :join_owner, :joins => {:event => :owner}
named_scope :left_join_html_template,
:joins => "LEFT JOIN html_templates ON html_templates.id = activities.html_template_id"
named_scope :select_columns, lambda { |columns| {:select => columns}}
named_scope :order, lambda{ |order| {:order => order}}
end
Así que ahora usted puede construir fácilemte consultas así:
columns = "activities.*,events.title,events.owner_id,owners.full_name as owner_name"
@activities = Activity.join_event.join_owner.order("date_from ASC").select_columns(columns)
Considero que esta no es la mejor y más segura, pero en mi caso lo que realmente Minify recuento de consulta que se ejecuta por la petición y aún no se han producido errores sobre algunas consultas generadas incorrectas.
¿Cómo reduce realmente la carga de la base de datos? Por caché de memoria? –