Database Finders
-
Upload
silvano-natalizi-itis-alessandro-volta-perugia -
Category
Education
-
view
359 -
download
0
description
Transcript of Database Finders
Lezione su Ruby On Rails
Prof. Silvano Natalizi
Classe VAL – maggio 2009
Vogliamo progettare una funzione di ricerca dei dati di un database, che restituisca solo i record che soddisfano le specifiche richieste, indicate da opportuni criteri di ricerca.
Il progetto richiede che si creino: una nuova pagina di ricerca, dove l’utente possa
inserire il nome del cliente Un’azione find nel controllore che elabora la
ricerca Una pagina di risultati con la lista dei record
restituiti dalla ricerca, e per ciascuno di essi un link al recordo dettagliato
Dobbiamo creare una form senza usare un modello.
Usiamo form_for quando i campi della form sono associati agli attributi di un modello.
In questo caso usiamo form_tag
Una form_for è una form collegata ad un oggetto di un modello. Quando essa viene visualizzata, i valori dei suoi campi provengono dagli attributi dell’oggetto
Una form_tag non è collegata a nessun oggetto. Essa è usata per un insieme di valori di campi individuali. Ad esempio per cose come campi di ricerca o per altri dati che non devono essere salvati su di un database.
La funzione di ricerca è una risorsa, non una pagina separata.
Si può inserire in ogni pagina Ma aggiungere del codice ad ogni singola
pagina significa avere tanto codice duplicato Possiamo aggiungere la ricerca ad un solo
file? La risposta è si.
Anzitutto va chiarito che la stringa di ricerca digitata dall’utente nel campo di ricerca della form search, è disponibile al codice del controllore tramite l’array params[:search_string]
def find @client_workouts=ClientWorkout.find_all_by_client_name(
params[:search_string])
end
find_all_by_date_of_workout(…) find_all_by_client_name(…) find_all_by_trainer(…) find_all_by_paid_amount(…)
Un attributo di un modello corrisponde ad una colonna di una tabella del database. Pertanto ciascuno di questi finders può essere usato per trovare tutti i record con un particolare valore in una data colonna.
I finders generati per ogni attributo sono semplici, ma poco flessibili
Spesso dobbiamo fare delle query più complesse Per questa ragione i finders hanno il
parametro :conditions @client_workouts=ClientWorkout.find(:all, :co
nditions=>[“client_name=‘Lenny Goldberg’ OR trainer=‘Lenny Goldberg’”])
Questa versione del finder restituisce tutti i record che hanno come trainer o come cliente ‘Lenny Goldberg’