2009-12-22 6 views
2

Je cherche à créer une application Rails avec trois modèles. Un modèle représente les voitures, un autre représente les couleurs des voitures peuvent être peintes, et un troisième représente une commande pour une voiture dans une certaine couleur. Quelle est la meilleure façon de structurer la relation entre ces modèles?Meilleure façon de modéliser ces relations dans Rails

Répondre

3

Ceci est assez basique. Je vous suggère de lire attentivement les Rails guide sur les associations Active Record. Pour démarrer:

class Car < ActiveRecord::Base 
    has_many :orders 
    belongs_to :color 
end 

class Color < ActiveRecord::Base 
    has_many :cars 
    has_many :orders 
end 

class Order < ActiveRecord::Base 
    belongs_to :car 
    belongs_to :color 
end 
+0

Pas un mauvais départ, peut vouloir ajouter une validation à l'ordre pour s'assurer que la couleur d'une commande est compatible avec la voiture sélectionnée. – EmFi

0

J'ai pensé à cela un peu différemment de Janteh. Lorsque vous passez une commande, vous commandez une voiture particulière dans une couleur particulière, non? Je pense donc que les voitures et les couleurs devraient être associés par l'ordre, quelque chose comme ceci:

class Car < ActiveRecord::Base 
    has_many :orders 
end 

class Color < ActiveRecord::Base 
    has_many :orders 
end 

class Order < ActiveRecord::Base 
    belongs_to :car 
    belongs_to :color 
end 

Ceci est la plupart du temps ce Janteh suggéré, mais je n'associait une voiture directement avec une couleur particulière.

+0

Mais vous voulez également savoir dans quelles couleurs vous pouvez commander une certaine voiture, non? – Janteh

0

Je préférerais une relation has_many: through. De cette façon, vous pouvez accéder à toutes les couleurs d'une voiture particulière, et toutes les voitures commandées dans une certaine couleur.

class Car < ActiveRecord::Base 
    has_many :orders 
    has_many :colors, :through => :orders 
end 

class Color < ActiveRecord::Base 
    has_many :orders 
    has_many :cars, :through => :orders 
end 

class Order < ActiveRecord::Base 
    belongs_to :car 
    belongs_to :color 
end 
Questions connexes