2013-10-17 6 views
0

Je commence un nouveau projet de 3.2 rails (idéalement être sur MySQL) qui se concentre sur la vente de différents types de véhicules. Nous commençons par modéliser des voitures, des motos et des remorques. Je pense avoir une classe Vehicle qui gère les aspects communs (comme is_enabled) et qui a un profil pour chacun des sous-classes (comme has_one: motorcycle_profile).comment modéliser cette relation

class Vehicle < ActiveRecord::Base 
    attr_accessor :is_enabled, :year # 
end 

class Motorcyle < Vehicle 
    has_one :motorcycle_profile 
end 

class MotorcyleProfile < ActiveRecord::Base 
    attr_accessor :front_tire # something motorcycle specific 
end 

... 

Est-ce que cela ressemble à une approche raisonnable? Est-ce que les IST pourraient aider avec tel ou tel problème plus que ça ne le vaut?

thx pour l'aide

Répondre

0

Mon expérience avec ce type de logiciel de boutique en ligne est que vous avez besoin d'une sorte de peu souvent produits à se comporter différents que les autres types de produits. Après tout, ils peuvent tous être achetés à peu près de la même manière avec un prix, un code de produit et quelques photos. Cependant, vous pouvez inclure différents attributs sur différents types de produits. Par exemple, un attribut de type de carburant sur un vélo n'a pas de sens, tandis qu'un attribut de pédale sur une voiture est également inutile. Plutôt que de créer des modèles ActiveRecord différents pour mettre en place vos différents attributs dans différentes tables, je pense que vous devriez envisager de placer les attributs partagés dans des colonnes ordinaires, puis placer les données personnalisées dans un hash, supporté par Rails 4 et Postgres.

Il vous permet fondamentalement d'avoir un ensemble différent d'attributs pour chaque enregistrement de produit individuel.

+0

thx Niels, je comprends où vous allez avec ce concept. Honnêtement, je n'ai pas fait le saut à Rails 4 et Postgres (ferait probablement 3.2 et MySQL). Je vais regarder dans ces suggestions si. Je serais un peu préoccupé par la recherche, les portées, etc avec cela dans un magasin de hachage. En outre, il pourrait être un peu opaque pour les nouveaux développeurs. Mais ces choses changent avec le temps. – timpone

+0

Postgres prend en charge l'interrogation des attributs personnalisés individuels. –

Questions connexes