jeudi 26 mars 2009

rails activerecord: utilisation d'une simple table pour des libellés

Il arrive souvent d'avoir besoin d'une table toute simple qui sera utilisée pour afficher un libellé correspondant à un code.

Il faut prévoir à la création et à l'édition une liste déroulante construite à partir de ces tables de libellé.

ActiveRecord de Rails permet de simplifier l'écriture des vues.

Soit la table des Produits (notre table des libellés)

id :primary key (auto-incrementé)
libelle : string

Soit la table Factures qui va utiliser ces libellés :
id :primary key (auto-incrementé)
... infos diverses ....
produit_id (clé étrangère)
...Suite ....

Pour ajouter une liste déroulante dans la vue facture , il suffira d'écrire :

<%= f.label :Produit %>

<%= select("facture", "produit_id", Produit.find(:all).collect {|p| [ p.libelle, p.id ] }, {:include_blank => 'None'})
%>

Ces lignes vont :
chercher toutes les occurences de la table produit
Construire la liste déroulante en ajoutant au sommet une ligne 'none'
Associer le parametre params[:facture][:produit_id] au formulaire .

Pour fonctionner il faut décrire le lien unissant produit à facture par la clause :

belongs_to :produit DANS le modèle de Facture.

Aucun commentaire: