J'ai un modèle de produit, un modèle Statuses et un modèle Productstatus.Utilisez des booléens ou has_many à travers?
Product has_many :productstatuses, :dependent => :destroy
Product has_many :statuses, :through => :productstatuses
Status has_many :productstatuses
Status has_many :products, :through => :productstatuses
Productstatus belongs_to :product
Productstatus belongs_to :status
J'utilise les états de deux manières. Un, pour montrer la progression d'un produit qui traverse notre système (états bookmark, processing, approved
) Une fois qu'un produit a le statut approved
, il ne peut pas reculer dans le système (de sorte que je ne crée pas de publique 404) un produit doit avoir un de ces trois en tout temps pour être valide
J'utilise aussi les statuts des différents « drapeaux » sur les produits:..
retired
lorsqu'un produit n'est plus disponible (ce produit aura également toujours le statutapproved
;approved
== publiquement indexable dans notre plan du site, maisretired
la supprime de partout sur notre site (index, archives, etc.) sans 404'ing son permalien)pre-sale
lorsqu'un produit est pas encore disponible (pourrait avoir l'un des trois ci-dessus)needs-images
(pourrait avoir l'un des trois)
Ma question est un peu à deux parter:
Si je viens de faire les « drapeaux » statuts booléens sur le modèle de produit? Je demande parce que:
Comment écrire une portée qui dit
approved but not retired
? Ou ?
Avec un booléen, je peux juste avoir une portée comme scope :not_foo where(:foo = false)
et enchaînez les tout. Je dessine un vide sur la meilleure façon de faire la même chose avec la configuration ci-dessus. Je pensais que la configuration has_many :through
était la voie à suivre (les drapeaux en tant que booléens semblaient être beaucoup trop de falses
dans ma base de données) mais la structure/planification de base de données n'est pas mon fort.
Merci pour la suggestion. Une raison pour laquelle les transitions gemme sur aasm ou les autres? – jaacob
pas de grande différence, il suffit de jeter un coup d'œil sur les deux et d'utiliser celui qui sera plus facile à démarrer, les fonctionnalités fournies sont similaires – mpapis