Creare select box dinamici con ruby on rails
Posted by Dibi Store Wed, 19 Sep 2007 19:58:00 GMT
A volte capita che dobbiamo creare dei select box dinamici nelle nostre applicazioni. L'esempio frequente è l'aggiunta di una categoria nella creazione di un prodotto.
Ipotizziamo di avere una tabella products in qui dobbiamo memorizzare un numero, che non è altro che l'identificativo del nome della categoria presente nella tabella products.
L'obiettivo è quindi quello di creare in modo dinamico una select box che abbia il seguente aspetto:
<select name="product[category_id]" id="product_category_id"> <option value="1">categria1</option> <option value="2">categoria2</option> </select>
Per fare questo possiamo unire la funzione collect di ruby e l'helper select di rails. Iniziamo inserendo questo codice nel controller, che creerà l'array di elementi:
def new
@categories = Category.find(:all).collect { |c| [c.name, c.id] }
end
E' tutto, ora ci basterà solamente aggiungere questa riga di codice nella vista, e il gioco è fatto:
<%= select(:product, :category_id, @categories) %>EDIT
Se questo metodo vi sembra troppo complicato, potete inserire semplicemente i seguenti codice, rispettivamente nel controller e nella vista:
def new @categories = Category.find(:all) end <%= collection_select(:product, :category_id, @categories, :id, :name) %>
In effeti con la prima soluzione (che gia di per se è un vantaggio) capite il funzionamento, con la seconda, non dovete fare piu niente :D


E se la select non fosse legata ad un oggetto? Mi spiego: in questo caso, noi andiamo a prendere il valore della select e lo mettiamo dentro product[category_id] perché ci interessa l'attributo category_id della classe product; ma come facciamo se la select va fatta su un parametro che non sia un attributo di una classe, ma un semplice nome (ad esempio il filtro per una lista)?
mi rendo conto che questo post è scritto molto male (sarà mia premura riscriverlo) cercando di spiegare anche il tuo dubbio (sperando di averlo capito).