Rails has_one,:as => (最佳实践)

时间:2014-04-02 13:33:28

标签: ruby-on-rails ruby-on-rails-3

假设模型有两个相同类型的子模型,但有两个不同的分类,例如Shop有两个ShippingOptions,但一个是国际的,一个是本地的

换句话说,你知道 总是只有两个,一个是国际的,一个是本地的,

是不错的做法,甚至可以做到以下几点:

shop.rb

has_one :shipping_option, :as => :international_shipping_option
has_one :shipping_option, :as => :local_shipping_option

否则,应该如何处理(最佳实践)

1 个答案:

答案 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_idshop