2009-04-07 7 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

나는 트릭을 할 수 있습니다 중 하나 또는 둘 다, 당신이 개 아이디어를 가지고 당신. 희망이 도움이됩니다!

3

BillingAddress 또는 ShippingAddress가 아니기 때문에 클래스 이름을 지정해야합니다. 은 주소가 주문에 속하기

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

이 더 이해가되지 않습니다 :

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 

는 연결을 완료하려면? – Mohamad