Ruby on rails 轨道STI设计问题
我正在做一个用户可以有多个客户端的辅助项目。这些客户可以是个人或企业类型 我倾向于使用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可以吗?或者第二个问题,是否有任何方法允许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