如何撰写表格模型和“扩展表”?

时间:2015-10-19 22:15:01

标签: ruby-on-rails ruby-on-rails-4

我正在尝试确定构建两个独立表的单一模型的最佳解决方案 - 普通/标准表和“扩展表”。

以下是一个人为的例子(希望)有助于更好地说明:

表格

  • users idfirst_namelast_name
  • users_extend user_idextra_field_1extra_field_2etc

型号:

idfirst_namelast_nameextra_field_1extra_field_2etc

我无法改变现有的数据库结构,因此我使用的任何解决方案都必须能够处理这种类型的设置。

_extend表的原因是应用程序的下游使用者可以向扩展表添加其他字段,而不会有任何未来更新对users表造成损害的风险。

我之前已经指出composed_of作为潜在解决方案的方向,但我看不出它如何解决两个连接表的问题。我还看到它仍然可能会被弃用/删除,所以我认为这条路可能已被排除。

单表继承是否可能成为解决方案?这看起来似乎有所帮助,但我并没有完全掌握如何弯曲它以适应我想要解决的问题。

非常感谢任何帮助/示例。

谢谢!

2 个答案:

答案 0 :(得分:2)

User可以只是has_one UserExtend(或者可能是更加一致的名称,例如UserExtension),belongs_to User

你可能会对此更加看中,但这似乎是合乎逻辑的,因为users_extend已经拥有传统的user_id外键。

您的具体实施可能会改变这一点,但根据描述似乎是可行的。

答案 1 :(得分:1)

正如@ TK-421所指出,您需要与has_one建立UserExtend关联。然后,您可以使用委托来获取所需的属性。例如:

class User < ActiveRecord::Base
  USER_EXTEND_ATTRS = %i(extra_field_1 extra_field_2).freeze

  has_one :user_extend
  delegate *USER_EXTEND_ATTRS, to: :user_extend
end
相关问题