Rails:需要帮助定义地址表的关联
我发现这有点弯曲,想要一些想法。 我的设计喜欢这个:
- 有构建者表,每个构建者都可以有一个邮政地址
- 有一个客户表,每个客户可以有一个邮政地址和账单地址
- 有一个地址表
我需要定义构建器地址和客户端地址之间的关联
我最初的数据库设计是这样的:
Builders -------------------- id postal_address_id ... Clients -------------------- id postal_address_id billing_address_id ... Addresses ------------------- id ...
这对我来说似乎合乎逻辑,但我在rails关联中翻译它时遇到了麻烦。
我在想地址可以定义belongs_to:可寻址的多态关联。 但是如何处理客户的邮政和账单地址。
任何帮助都感激不尽。
在这种情况下,我会使用STI(单表inheritance),我认为这是完美的情况。
首先,您必须在地址模型中添加字段“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
在rails doc中阅读有关STI的更多信息
您可以在addressable
表中找到address_type
列。 然后你可以像这样对范围进行范围调整:
class Client has_one :biling_address, :as => :addressable, :conditions => {:address_type => "billing"} has_one :shipping_address, :as => :addressable, :conditions => {:address_type => "shipping"} end