我正在尝试确定构建两个独立表的单一模型的最佳解决方案 - 普通/标准表和“扩展表”。
以下是一个人为的例子(希望)有助于更好地说明:
表格
users
:id
,first_name
,last_name
users_extend
:user_id
,extra_field_1
,extra_field_2
,etc
型号:
id
,first_name
,last_name
,extra_field_1
,extra_field_2
,etc
我无法改变现有的数据库结构,因此我使用的任何解决方案都必须能够处理这种类型的设置。
_extend
表的原因是应用程序的下游使用者可以向扩展表添加其他字段,而不会有任何未来更新对users
表造成损害的风险。
我之前已经指出composed_of
作为潜在解决方案的方向,但我看不出它如何解决两个连接表的问题。我还看到它仍然可能会被弃用/删除,所以我认为这条路可能已被排除。
单表继承是否可能成为解决方案?这看起来似乎有所帮助,但我并没有完全掌握如何弯曲它以适应我想要解决的问题。
非常感谢任何帮助/示例。
谢谢!
答案 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