[ruby-it] Ottmizzazione delle ricerche nel DB

Andrea Longhi andrea74 a mailshack.com
Gio 11 Giu 2009 00:45:11 CEST


Luigi Maresca wrote:
> Un'altra domanda:
> ma un comando di questo tipo
> 
> law.votes.count
> 
> implica una ricerca nel DB così come il comando
> 
> @votes.count(:all,:conditions=>"law_id=#{law.id} and yes")
> 
> ?

Dipende. Se hai già raccolto i voti associati a quella legge no. Per 
toglierti questi dubbi è sufficiente guardare il file development.log 
mentre smanetti con l'applicazione nel browser, o ancora meglio nella 
console in casi come questo. Da teminale se sei su un sistema unix-like: 
tail -f log/development.log

> e inoltre c'è differenza, sempre dal punto di vista dello sfruttamento 
> del DB, se la ricerca viene eseguita nel controller oppure nella vista?

No, ma certe cose nelle viste non ci dovrebbero essere.

> Per Andrea Longhi:
> 
> Perché :conditions=>'public' è inquitante???

Perche' non è il massimo della chiarezza, come lo yes del resto... 
pessimo nome per un campo, non trovi? Sai, finche' il codice lo legge 
solo chi lo scrive va  bene qualsiasi schifezza basta che funzioni(si fa 
per dire, quando dopo 6 mesi rileggi il tuo stesso codice ti voglio 
proprio vedere se capisci al volo cosa significa il campo yes), ma se lo 
devono leggere anche gli altri... beh meglio che sia chiaro.
Io espliciterei la condizione con

@laws = Law.all(:conditions => {:public => true})

o ancora meglio metterei un named_scope nel modello:

class Law < ActiveRecord::Base
  named_scope :public, :conditions => {:public => true}
  # ...
end

così quando scrivi Law.public ti trova tutte le leggi pubbliche... 
potresti fare la stessa cosa coi voti, qualcosa del tipo:

class Votes < ActiveRecord...
  named_scope :positive, :conditions => {:yes => true}
  #....
end
-- 
Posted via http://www.ruby-forum.com/.


More information about the Ml mailing list