t5in9tao a écrit :
Cependant, je ne sais pas quel commande exécuter pour
obtenir la même chose pour la 3ème table. Le problème,
c’est que si j’entre “client_produit”, Rails m’ajoutera un
« s » à la fin (sans comprendre qu’il s’agit d’une CIM
(Contrainte d’Intégrité Multiple)) mais il n’y
aura pas de « s » à clientX_produits…
2 possibilités :
- tu tiens à avoir des associations habtm :
client has_and_belongs_to_many :produits
produit has_and_belongs_to_many :clients
tu as donc ta table de jointure clients_produits, mais
pas de modèle associé. 3 tables, 2 modèles, or
le scaffold concerne les modèles et non les tables.
Selon ce que tu souhaites faire, tu modifieras le code
du scaffold que tu as déjà généré pour pouvoir par exemple,
rajouter des produits quand on consulte une fiche client.
- tu utilises à la place has_many :through, c’est à dire
que ta table de jointure devient elle-même un modèle.
Que ce soit ClientsProduit ou ClientProduit, c’est pas
très sexy tout ça, autant choisir un nom qui reflète
mieux ta logique métier.
Exemple :
class Client < AR::B
has_many :achats
has_many :produits, :through => :achats
end
class Produit < AR::B
has_many :achats
has_many :clients, :through => :achats
end
class Achat < AR::B
belongs_to :client
belongs_to :produit
end
tu as donc un modèle Achat, utilisable comme un autre modèle
et tant qu’Ã faire qui suit les conventions de Rails :
une clé primaire id, un nom de table achats, éventuellement
d’autres colonnes dans la table (et bien sûr les 2 clés
étrangères client_id, produit_id)
Donc comme t’as un modèle, tu peux faire un scaffold.
Bon maintenant, on est en 1.2.1, on peut faire mieux pour
pas beaucoup plus cher et être “restful” avec également
un scaffold adapté : scaffold_resource
ta ligne de commande pour Achat ressemblera par
exemple à :
$ script/generate scaffold_resource achat client_id:integer
produit_id:integer created_at:datetime
du même acabit pour Client et Produit.
Comble de la bravitude oops, de la paresse, t’auras
la ressource achat rajoutée automatiquement dans ton
config/routes.rb
Pour en savoir plus sur has_many :through (hmt),
pour une comparaison habtm versus hmt, voir le blog
http://blog.hasmanythrough.com
Bref, c’est un cas un peu ennuyeux et j’aimerais bien prendre
la bonne décision, afin que mon application puisse bien
commencer, c’est à dire sur la bonne voie 
A ce propos, j’ai nommé la table au centre d’après les
conventions de rails, en séparant le pluriel des 2 tables
par un « _ », dans l’ordre alphabétique.
Voilà ,
– Jean-François.