Nessun risultato. Prova con un altro termine.
Guide
Notizie
Software
Tutorial

Modificare controller e viste

Effettuare semplici modifiche all'applicazione agendo su controller e viste
Effettuare semplici modifiche all'applicazione agendo su controller e viste
Link copiato negli appunti

Le pagine HTML generate automaticamente dal comando scaffold ci permettono di interagire con la risorsa Bookmark tramite browser; dobbiamo però ammettere che queste pagine, seppur funzionali, non sono molto pratiche da utilizzare. Proviamo a eseguire due interventi per rendere più piacevole la pagina di elenco dei bookmark (action index del controller bookmarks):

  • I bookmark devono apparire in ordine alfabetico per titolo
  • Invece di visualizzare i dati in una tabella vogliamo farli apparire in un elenco puntato

Prima di intervenire sul codice cerchiamo di capire dove dobbiamo intervenire:

  • perché i bookmark appaiano in ordine alfabetico bisogna intervenire sull'istruzione che estrae i dati dal database così da indicare l'ordinamento voluto. Questo tipo di istruzione è presente nel controller
  • modificare la modalità di visualizzazione dei bookmark significa invece intervenire sulla parte che si occupa di generare la pagina HTML, quindi sulla vista

Iniziamo modificando il file app/controllers/bookmarks_controller.rb: l'istruzione che si occupa di recuperare i dati è Bookmark.find(:all). Leggendo il frammento di codice è già possibile capirne le differenti sezioni:

Bookmark - dal modello Bookmark
find     - trova
:all     - tutto

A questa istruzione dobbiamo aggiungere l'ordinamento, e lo faremo in questo modo:

Bookmark          - dal modello Bookmark
find              - trova
:all              - tutto
:order => 'title' - ordinato per campo title 
                    (title è uno dei campi della risorsa bookmark)

Otteniamo l'istruzione:

Bookmark.find(:all, :order => "title")

Sostituiamo questa istruzione a quella attuale e ricarichiamo la pagina http://0.0.0.0:3000/bookmarks. Ora i bookmark sono mostrati in ordine alfabetico, questo perché la vista mostra i risultati che il controller ha preparato, già in ordine, nella variabile @bookmarks.

Per il secondo intervento, sull'aspetto della pagina Web, modifichiamo vista. Apriamo il file app/views/bookmarks/index.html.erb e sostituiamo al codice esistente quello riportato qui sotto:

<h1>Listing bookmarks</h1>
<ul>
<% for bookmark in @bookmarks %>
 <li>
  <strong><%= bookmark.title %></strong><br />
  <%= bookmark.description %><br />
  
  <small>
  <%= link_to 'Show', bookmark %> |
  <%= link_to 'Edit', edit_bookmark_path(bookmark) %> |
  <%= link_to 'Destroy', bookmark, :confirm => 'Are you sure?', :method => :delete %>
  </small>
 </li>
<% end %>
</ul>

<br />
<%= link_to 'New bookmark', new_bookmark_path %>

Il codice non è cambiato poi molto: dopo il titolo <h1> incontriamo un ciclo for racchiuso tra <% e %> (codice Ruby che non produce testo). Il ciclo che viene eseguito per ogni bookmark dell'elenco @bookmarks. Ad ogni iterazione la variabile bookmark (al singolare e senza la @) assumerà il valore di uno dei bookmark contenuti nella variabile @bookmarks.

All'interno del ciclo troviamo alcuni tag <%= %>, che producono il testo da inserire nella pagina; <%= bookmark.title %> è il titolo del bookmark, mentre <%= bookmark.description %> ne rappresenta la descrizione.

Aggiungiamo un link utilizzando l'indirizzo del bookmark come URL e il titolo come testo. Ruby on Rails mette a disposizione un'istruzione particolare per la costruzione dei link, che vediamo utilizzata anche nella pagina che stiamo analizzando: link_to.

L'istruzione link_to prevede due tipi di link:

  • link assoluto verso una risorsa esterna (ad esempio una pagina di un sito internet)
  • link verso l'action di un controller dell'applicazione

Il nostro esempio ricade ovviamente nel primo caso. Pertanto utilizziamo la sintassi:

link_to <etichetta del link>, <url>  

Che nel nostro caso diventa:

<h1>Listing bookmarks</h1>
<ul>
<% for bookmark in @bookmarks %>
  <li>
  <strong><%= link_to bookmark.title, bookmark.url %></strong><br />
...

Ricaricando la pagina di elenco dei bookmark otterremo quindi:

Figura 4. Risultato finale
Risultato finale

Ti consigliamo anche