activerecord 关系,has_one 与现有 table 中的附加列

activerecord relationship, has_one vs additional column in existing table

我有一个工作正常的 Customer 模型。现在我有一个新的要求。客户应该有一个驾驶执照。许可证的实施包括两件事 -

  1. 许可证应包含两张图片(客户将上传)
  2. 许可证应具有状态('approved'、'pending'、'rejected' 等由管理员设置)

现在,我的疑问是 has_one 关系与客户 table 中的其他列。有两种实现方式

  1. 我创建了一个 Licence 具有属性的模型 - front_imageback_imagestatus 并在 License 之间创建了 has_one belongs_to 关系和客户。
  2. 我创建了额外的列,licence_statuslicence_front_imagelicence_back_imageCustomer 模型本身。

哪种方法更好?

在我看来,一对一关系很容易理解,但很难看出何时使用一对一关系。

一个例子是一个应用程序,它可以选择让用户连接他们的 FacebookTwitter 帐户。

在这种情况下,对于特定用户,facebook_account_idtwitter_account_id 可以是 NULL,这意味着该用户尚未连接他们的 Twitter and/or Facebook 帐户。此外,facebook_accountstwitter_accounts table 根本不引用 users table。

当然,您可以将facebook_accounts table中的所有字段直接移动到user table中。 任何一对一关系都是如此,这就是为什么很难看出何时使用一对一的原因。

我遵循的经验法则是:如果你有一个逻辑分组的字段,这些字段都可以是 NULL, 以一对一的关系将这些字段拆分为单独的 table 是个好主意。

在您的情况下,License 模型看起来确实是一个逻辑字段分组,可以选择 NULL。因此,采用 1 方法。此外,如评论中所述,如果将来您有机会扩展 License 模型,那么使用 1[=27= 会更有意义]