假设模型有两个相同类型的子模型,但有两个不同的分类,例如Shop
有两个ShippingOptions
,但一个是国际的,一个是本地的
换句话说,你知道 总是只有两个,一个是国际的,一个是本地的,
是不错的做法,甚至可以做到以下几点:
shop.rb
has_one :shipping_option, :as => :international_shipping_option
has_one :shipping_option, :as => :local_shipping_option
否则,应该如何处理(最佳实践)
答案 0 :(得分:18)
这样做是完全正常的,但你选择了错误的语法。
您在belongs_to
之后,需要使用“as”选项作为关联名称,并指定一个显式的类名:
belongs_to :international_shipping_option, class_name: 'ShippingOption'
belongs_to :local_shipping_option, class_name: 'ShippingOption'
关联的名称映射到外键,因此您的international_shipping_option_id
表中应该有两列名为local_shipping_option_id
和shop
。