我正在构建一个 Rails 应用程序,其中一个User
可以有很多Addresses
. AUser
还需要一个主要帐单Address
、主要运输Address
和主要配置文件Address
。这些主要字段可以指向相同的Address
. AUser
不能有多个 primary Address
。
我创建了一个名为 的连接表AddressInfo
,我在几个选项之间来回切换:
User
在模型上创建与每个主 ID 对应的3 列Address
(我认为这将消除对连接模型的需要)。- 向 中添加一个
primary
布尔列AddressInfo
,并确保在user_id
,address_id
和purpose
( 目的是billing
,shipping
或profile
) 范围内只有一个为真。 - 向 中添加
primary
日期时间列AddressInfo
,并使用最近更新的地址作为主地址(范围与选项 2 类似)。
也许这些选项不是最好的,但这是我迄今为止想出的。
任何有关如何解决此问题的帮助将不胜感激。
更新:
需要明确的是,一旦Address
创建了 an ,它就应该始终属于那个User
并且不可删除。前任。aUser
将他们的主要帐单地址更改为新的Address
:他们应该仍然能够检索那个旧Address
地址(甚至可能再次将其设为主要地址)。如果我选择选项 1 并删除连接表,这意味着我需要一个user_id
on Address
。