我有一个运行良好的客户模型。现在我有了一个新的要求。客户应该拥有一张驾驶执照。许可证的实现包括两件事 -
- 许可证应包含两张图片(客户将上传)
- 许可证应具有由管理员设置的状态(“已批准”、“待处理”、“已拒绝”等)
现在,我的疑问是 has_one 关系与客户表中的附加列。有两种实现方式
- 我创建了一个
Licence
具有属性的模型 -front_image
,back_image
,status
并创建一个has_one
belongs_to
许可与客户之间的关系。 - 我创建了附加列
licence_status
,licence_front_image
,licence_back_image
至Customer
模型本身。
哪种方法更好?
最佳答案
在我看来,一对一关系相当容易理解,但很难看出何时使用一对一关系。
一个示例是一个应用程序,它可以选择让用户连接他们的 Facebook
和Twitter
账户。
在这种情况下,对于特定用户,facebook_account_id
和 twitter_account_id
可以是NULL
,这意味着用户尚未连接他们的 Twitter 和/或 Facebook 帐户。另外,facebook_accounts
和twitter_accounts
表不引用 users
根本没有 table 。
当然,您可以移动facebook_accounts
中的所有字段。表直接进入user
table 。
对于任何一对一关系都是如此,这就是为什么很难判断何时使用一对一关系。
我遵循的经验法则是:如果您有一个字段的逻辑分组,这些字段都可以选择 NULL
,
最好将这些字段以一对一的关系拆分到一个单独的表中。
就您而言,它看起来像 License
模型确实是字段的逻辑分组,可以选择 NULL
。因此,请采用方法 1
。另外,正如评论中提到的,如果将来您有机会扩展 License
模型,使用 1
更有意义
关于ruby-on-rails - activerecord 关系,has_one 与现有表中的附加列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30961601/