23
Lezione su Ruby On Rails Prof. Silvano Natalizi Classe VAL – maggio 2009

Database Finders

Embed Size (px)

DESCRIPTION

i finders di ruby on rails

Citation preview

Page 1: Database Finders

Lezione su Ruby On Rails

Prof. Silvano Natalizi

Classe VAL – maggio 2009

Page 2: Database Finders

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.

Page 3: Database Finders
Page 4: Database Finders

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

Page 5: Database Finders
Page 6: Database Finders

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

Page 7: Database Finders
Page 8: Database Finders
Page 9: Database Finders

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.

Page 10: Database Finders

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.

Page 11: Database Finders
Page 12: Database Finders
Page 13: Database Finders

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]

Page 14: Database Finders
Page 15: Database Finders

def find @client_workouts=ClientWorkout.find_all_by_client_name(

params[:search_string])

end

Page 16: Database Finders

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.

Page 17: Database Finders
Page 18: Database Finders
Page 19: Database Finders
Page 20: Database Finders
Page 21: Database Finders

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’

Page 22: Database Finders
Page 23: Database Finders