4.5 - Otteniamo i record dal database

Vedi tutte le pagine e le modifiche recenti o scarica i sorgenti nella pagina


Il metodo principale per recuperare i dati salvati su database è il metodo di classe find(API) ereditato da tutti i nostri modelli dal modulo ActiveRecord::Base. Il metodo presenta tre diversi profili di utilizzo:

Vediamo subito qualche esempio:

team = Team.find(1) #team conterrà l'oggetto Team con id uguale a 1
teams = Team.find([1,2,3]) #teams sarà un array di Team
team = Team.find(:first) #prima squadra per id
teams = Team.find(:all) #array contenente tutte le squadre

Ovviamente il metodo presenta altre molte modalità di utilizzo, rappresentabili tramite un hash associativo. Tra le principali vale la pena di ricordare:

teams = Team.find(:all, :conditions => "balance > 1000", :order => "name")
team = Team.find(:first, :order => "balance")
teams = Team.find(:all, :order => "name", :limit => 10)

Oltre al metodo find esistono i cosiddetti dynamic finder, metodi creati ad hoc per recuperare i nostri modelli a partire da un attributo chiave. Questi metodi presentano una struttura comune: find_by_(attr) e find_all_by_(attr). Basterà sostituire (attr) con un attributo della classe per avere dei metodi pronti all’uso. La prima categoria di finders ritorneranno il primo record mentre la seconda un array. Guardiamo un esempio:

milan = Team.find_by_name("Milan")
inter = Team.find_by_owner("Massimo Moratti")
richest = Team.find_all_by_balance(1000000)

I dinamic finder possono essere mixati tra di loro creando di fatti nuovi metodi:

juve = Team.find_by_name_and_owner("Juventus", "Giovanni Cobolli Gigli")
romane = Team.find_all_by_name_or_owner("Lazio", "Franco Sensi")

Nel caso di congiunzione and entrambi i requisiti devono essere rispettati; nel caso or basta che ne venga rispettato solamente uno.

Gli ultimi due metodi da segnalare sono count(API) e exists?(API) che permettono rispettivamente di conteggiare i record che rispecchiano determinati requisiti (parametri simili al metodo find) e di sapere se un preciso modello esiste già nel database.

c = Team.count("balance > 1000") #torna un intero
b = Team.exists?(:name => "Milan") #torna un boolean

Guida RoR

4.4 – Salvataggio di un nuovo record

4.6 – Aggiorniamo i modelli già esistenti

Updated on September 05, 2007 14:34 by Ruby Fan (213.156.54.186)