【问题标题】:How to give an order a shipping address and a billing address in rails如何在 Rails 中为订单提供送货地址和帐单地址
【发布时间】:2010-10-18 02:36:35
【问题描述】:

在我的在线商店中,每个订单都与一个送货地址和一个账单地址相关联(当然,它们可以相同)。这是我第一次尝试对此建模:

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

这很好用,但现在表单助手不起作用。即form_for 只会生成名称为address[zipcode] 的字段,因此我必须手动破解它以获取billing_address[zipcode]shipping_address[zipcode]

我想我可以使用单表继承将 Address 子类化为 ShippingAddressBillingAddress,但这对我来说似乎有点 hacky(并且与 Best way to model Customer <--> Address 中的一些好的答案相矛盾)。

【问题讨论】:

    标签: ruby-on-rails e-commerce modeling


    【解决方案1】:

    您需要指定类名,因为它不是 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】:

    我有两个想法给你,其中一个或两个都可以解决问题:

    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"
    

    请与您的表单助手一起尝试一下,我很想知道它是否适合您。希望对您有所帮助!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-07-26
      • 1970-01-01
      • 2019-09-13
      • 1970-01-01
      • 1970-01-01
      • 2014-04-04
      相关资源
      最近更新 更多