Database Finders

530 views

Published on

i finders di ruby on rails

Published in: Education, Business, Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
530
On SlideShare
0
From Embeds
0
Number of Embeds
3
Actions
Shares
0
Downloads
12
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Database Finders

  1. 1. Lezione su Ruby On Rails Prof. Silvano Natalizi Classe VAL – maggio 2009
  2. 2. <ul><li>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. </li></ul>
  3. 4. <ul><li>Il progetto richiede che si creino: </li></ul><ul><ul><li>una nuova pagina di ricerca, dove l’utente possa inserire il nome del cliente </li></ul></ul><ul><ul><li>Un’azione find nel controllore che elabora la ricerca </li></ul></ul><ul><ul><li>Una pagina di risultati con la lista dei record restituiti dalla ricerca, e per ciascuno di essi un link al recordo dettagliato </li></ul></ul>
  4. 6. <ul><li>Dobbiamo creare una form senza usare un modello. </li></ul><ul><li>Usiamo form_for quando i campi della form sono associati agli attributi di un modello. </li></ul><ul><li>In questo caso usiamo form_tag </li></ul>
  5. 9. <ul><li>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 </li></ul><ul><li>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. </li></ul>
  6. 10. <ul><li>La funzione di ricerca è una risorsa, non una pagina separata. </li></ul><ul><li>Si può inserire in ogni pagina </li></ul><ul><li>Ma aggiungere del codice ad ogni singola pagina significa avere tanto codice duplicato </li></ul><ul><li>Possiamo aggiungere la ricerca ad un solo file? </li></ul><ul><li>La risposta è si. </li></ul>
  7. 13. <ul><li>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] </li></ul>
  8. 15. <ul><li>def find </li></ul><ul><ul><li>@client_workouts=ClientWorkout.find_all_by_client_name(params[:search_string]) </li></ul></ul><ul><li>end </li></ul>
  9. 16. <ul><li>find_all_by_date_of_workout(…) </li></ul><ul><li>find_all_by_client_name(…) </li></ul><ul><li>find_all_by_trainer(…) </li></ul><ul><li>find_all_by_paid_amount(…) </li></ul><ul><li>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. </li></ul>
  10. 21. <ul><li>I finders generati per ogni attributo sono semplici, ma poco flessibili </li></ul><ul><li>Spesso dobbiamo fare delle query più complesse </li></ul><ul><li>Per questa ragione i finders hanno il parametro :conditions </li></ul><ul><li>@client_workouts=ClientWorkout.find(:all, :conditions=>[“client_name=‘Lenny Goldberg’ OR trainer=‘Lenny Goldberg’”]) </li></ul><ul><li>Questa versione del finder restituisce tutti i record che hanno come trainer o come cliente ‘Lenny Goldberg’ </li></ul>

×