Rails:需要帮助定义地址表的关联

时间:2011-06-15 05:14:55

标签: ruby-on-rails activerecord

我发现这有点弯曲,想要一些想法。我的设计喜欢这个:

  • 有构建者表,每个构建者都可以有一个邮政地址
  • 有一个客户表,每个客户可以有一个邮政地址和一个账单地址
  • 有地址表

我需要定义构建器地址和客户端地址

之间的关联

我最初的数据库设计是这样的:

Builders
--------------------
id
postal_address_id
...

Clients
--------------------
id
postal_address_id
billing_address_id
...

Addresses
-------------------
id
...

这对我来说似乎是合乎逻辑的,但我在rails关联中翻译它时遇到了麻烦。

我认为地址可以定义belongs_to:可寻址的多态关联。但是如何处理客户的邮政和账单地址。

非常感谢任何帮助。

2 个答案:

答案 0 :(得分:8)

在这种情况下,我会使用STI(单表继承),我认为这是完美的情况。

首先,您必须在地址模型中添加字段“type” 然后你可以定义这样的类:

class Client
  has_one :billing_address, :as => :addressable
  has_one :shipping_address, :as => :addressable
end

class Address < ActiveRecord:Base
  belongs_to :addressable, :polymorphic => true
end

class BillingAddress < Address
end

class Shipping Address < Address
end

详细了解STI in the rails doc

答案 1 :(得分:4)

您可以在address_type表格中添加addressable列。然后你可以像这样对范围进行范围界定:

class Client
  has_one :biling_address, :as => :addressable, :conditions => {:address_type => "billing"}
  has_one :shipping_address, :as => :addressable, :conditions => {:address_type => "shipping"}
end