Has_one通过AND has_many一起通过

时间:2017-05-27 17:02:28

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

您好我有3个型号:

  • 出售
  • 客户
  • 客户地址

- 每次销售应该只有一个CUSTOMER

- 每个CUSTOMER可以有多个SALE

这很好用,这里没问题,但现在我需要这样的东西:

- 每次销售应该只有一个CUSTOMER_ADDRESS

- 每个CUSTOMER可以有多个CUSTOMER_ADDRESS

然后,我该怎么做?

我可以一起使用has_one和has_many吗?

1 个答案:

答案 0 :(得分:0)

首先在客户和地址之间创建1-n关联:

class Customer < ApplicationRecord
  has_many :addresses
end

class Address < ApplicationRecord
  belongs_to :customer
end

然后添加订单模型并设置关联:

class Customer < ApplicationRecord
  has_many :addresses
  has_many :sales
end

class Address < ApplicationRecord
  belongs_to :customer
  has_many :sales_as_shipping_address, class_name: 'Sale',
                                       foreign_key: 'shipping_address_id'
end

class Sale < ApplicationRecord
  belongs_to :customer
  belongs_to :shipping_address, class_name: 'Address'
end

这会创建两个单独的关联 - 销售和客户都与地址有明显的关联。

如果您想通过促销加入客户地址,我们可以:

class Customer < ApplicationRecord
  has_many :addresses
  has_many :sales
  has_many :shipping_addresses, through: :sales, 
                               source: :shipping_address
end