2009-04-07 7 views
3

Dans ma boutique en ligne, chaque commande est associée à une adresse de livraison et une adresse de facturation (elles peuvent être les mêmes, bien sûr). C'est ma première tentative pour modéliser ceci:Comment donner une adresse de livraison et une adresse de facturation dans les rails

Class Order 
    belongs_to :billing_address, :class => "Address" 
    belongs_to :shipping_address, :class => "Address" 

Cela fonctionne plutôt bien, mais maintenant les aides de formulaire ne fonctionnent pas. Par exemple, form_for génèrera uniquement des champs avec des noms tels que address[zipcode], donc je dois le hacher manuellement pour obtenir billing_address[zipcode] et shipping_address[zipcode].

Je suppose que je pourrais utiliser l'héritage de table unique sous-classe Address dans ShippingAddress et BillingAddress, mais cela semble un peu hacky à moi (et en contradiction avec quelques bonnes réponses à Best way to model Customer <--> Address).

Répondre

2

J'ai deux idées pour vous, ou les deux qui peuvent faire l'affaire:

Class Order 
    belongs_to :billing_address, :class_name => "Address" 
    belongs_to :shipping_address, :class_name => "Address" 

Class Order 
    belongs_to :address, :foreign_key => "billing_address_id" 
    belongs_to :address, :foreign_key => "shipping_address_id" 

S'il vous plaît les essayer avec vos aides de forme et je serais intéressé de savoir si cela fonctionne pour toi. J'espère que cela aide!

3

Vous devez indiquer le nom de la classe, car il ne s'agit pas de BillingAddress ou de ShippingAddress.

class Order < ActiveRecord::Base 
    # foreign key not required here because it will look for 
    # association_name_id, e.g. billing_address_id, shipping_address_id 
    belongs_to :billing_address, :class_name => "Address" 
    belongs_to :shipping_address, :class_name => "Address" 
end 

Pour terminer l'association:

class Address < ActiveRecord::Base 
    # foreign key required here because it will look for class_name_id, 
    # e.g. address_id 
    has_many :billing_orders, :class_name => "Order", 
    :foreign_key => "billing_address_id" 
    has_many :shipping_orders, :class_name => "Order", 
    :foreign_key => "shipping_address_id" 
end 
+2

-t-il pas plus logique pour une adresse d'appartenir à un ordre? – Mohamad

Questions connexes