database finders

Post on 13-Jun-2015

359 Views

Category:

Education

0 Downloads

Preview:

Click to see full reader

DESCRIPTION

i finders di ruby on rails

TRANSCRIPT

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’

top related