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

Mar*_*ins 9 ruby-on-rails ruby-on-rails-3

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

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

这是好的做法,甚至可能做到以下几点:

shop.rb

has_one :shipping_option, :as => :international_shipping_option
has_one :shipping_option, :as => :local_shipping_option
Run Code Online (Sandbox Code Playgroud)

否则,应如何处理(最佳做法)

mea*_*gar 18

这样做是完全正常的,但是你选择了错误的语法.

您在a之后belongs_to,需要使用"as"选项作为关联的名称,并指定一个显式的类名:

belongs_to :international_shipping_option, class_name: 'ShippingOption'
belongs_to :local_shipping_option, class_name: 'ShippingOption'
Run Code Online (Sandbox Code Playgroud)

关联的名称映射到外键,因此您应该在表中有两个名为international_shipping_option_ida和a local_shipping_option_idshop列.