Ruby on rails 轨道STI设计问题

Ruby on rails 轨道STI设计问题,ruby-on-rails,single-table-inheritance,sti,Ruby On Rails,Single Table Inheritance,Sti,我正在做一个用户可以有多个客户端的辅助项目。这些客户可以是个人或企业类型 我倾向于使用STI,但我不确定这是否正确,因为我的模型不会共享相同的属性 例如,一家企业有一种法律形式,其中一个人可能有婚姻状况 在这种特殊情况下使用STI可以吗?或者第二个问题,是否有任何方法允许rails为每种类型使用单独的表。STI类似于ruby中的继承。如果您有父项和子项,并且它们共享许多属性和数据,则可以使用它。如果个人和企业分享很多,你可以使用它。否则我建议你用 关于关联的一个稍微高级的扭曲是多态性 协会有了多

我正在做一个用户可以有多个客户端的辅助项目。这些客户可以是个人或企业类型

我倾向于使用STI,但我不确定这是否正确,因为我的模型不会共享相同的属性

例如,一家企业有一种法律形式,其中一个人可能有婚姻状况


在这种特殊情况下使用STI可以吗?或者第二个问题,是否有任何方法允许rails为每种类型使用单独的表。

STI类似于ruby中的继承。如果您有父项和子项,并且它们共享许多属性和数据,则可以使用它。如果个人和企业分享很多,你可以使用它。否则我建议你用

关于关联的一个稍微高级的扭曲是多态性 协会有了多态关联,模型可以属于更多类型 而不是另一个模型,在单个关联上。例如,您可以 具有属于员工模型或员工模型的图片模型 产品模型。以下是如何声明这一点:

我仍然建议你尝试使用多态关联

STI的常见问题

STI的一个常见问题是,随着时间的推移,更多类型被添加到 表中的列和记录越来越多 桌子之间的共同点越来越少。每种类型 记录使用表列的某个子集,没有一个使用表列的所有子集 他们,所以你会得到一个非常稀疏的表。那些类型 为彼此创建成本:当您查询文章时,您必须 请记住过滤掉所有其他类型的值,并仅过滤到 选择与文章相关的栏目,否则将付出巨大的代价 费用如果需要的话,您可以复制数据库为您所做的大量工作 您在自己的表中只有每种数据类型


假设我选择多态关联,这是正确的吗

class Client < ActiveRecord::Base
  belongs_to :cliental, polymorphic: true
end

class Business < ActionRecord::Base
  # Here I am using has_one because I do not want to have duplicates
  has_one :client, as: :cliental
end

 class Person < ActionRecord::Base
  # Here I am using has_one because I do not want to have duplicates
  has_one :client, as: :cliental
end
稍后我想做以下几点

class User < ActiveRecord::Base
  has_many clients
  has_many businesses, through: :client
  has_many people, through: :client
end

我考虑过使用多态关联,但我不知道该如何组织它。我已经创建了3个模型,其中包含3个表:客户表、业务表和个人表。我的最终目标是拥有一个客户控制员,我可以从中获取所有客户的列表,无论他们是商业客户还是个人客户。@makabde是的,问题出在哪里?:
class User < ActiveRecord::Base
  has_many clients
  has_many businesses, through: :client
  has_many people, through: :client
end