2009-04-07 13 views
3

での請求先住所を与えるためにどのように、各注文は配送先住所と請求先住所に関連付けられている(彼らはもちろん、同じことができます)。これを初めてモデル化しようとしました。が順番に配送先住所とレールの私のオンラインストアで

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

これはかなりうまくいきましたが、今はフォームヘルパーが動作しません。すなわち、form_foraddress[zipcode]ような名前のフィールドを生成しますので、私は手動でbilling_address[zipcode]shipping_address[zipcode]を得るためにそれをハックする必要があります。

私はShippingAddressBillingAddressAddressをサブクラス化する単一テーブル継承を使用することができると思いますが、これは私には少しハックようだ(とBest way to model Customer <--> Addressにいくつかの良い答えを矛盾します)。

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" 

があなたのフォームヘルパーでそれらを試してみてください、私はそれがためにうまくいくかどうかを知るために興味があると思います:

答えて

2

私はトリックを行うことのいずれかまたは両方が、あなたのための2つのアイデアを持っています君は。それが役に立てば幸い!

3

あなたはそれがBillingAddressかの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 

関連付けを完了するには:

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

それは注文に属するアドレスのためのより多くの意味を成しませんか? – Mohamad

関連する問題