Sto utilizzando: join e: selezionare le opzioni se è necessario solo per visualizzare i dati. Ho trovato molto utile named_scope per definire tutti i possibili: join e uno: select_columns named_scope.Esempio
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
Così ora si può facilmente creare query come questa:
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)
Ritengo che questo non è il modo migliore e più sicuro, ma nel mio caso è davvero minify numero di query che esegue per ogni richiesta e non ci sono ancora errori relativi ad alcune query generate errate.
Come si riduce effettivamente il caricamento del database? Per memoria cache? –