你的基本方法看似合理。我建议你创建一个User类的基类,并将STI用于特定的User类型,例如:
class User < ActiveRecord::Base end class Manufacturer < User has_many :products has_many :transporters, :through => :products end
...等等。这样,如果需要将多个用户类型聚合到一个关系中而不管类型如何,则通常会有一个表来描述用户。这是一种相当常见的方法。
根据不同用户对系统的访问权限,您可能希望查看角色管理宝石 声明性授权 。
对于多用户系统,通常优选的方式是 - 使用角色模型或STI。如果您的用户可以同时拥有多个角色,例如单个用户是制造商和运输商,那么角色基础系统将是一个很好的解决方案。如果用户角色是固定的,那么我认为你应该选择STI。
我建议你制作一个用户模型,地址模型,ContactInfo模型等。你不应该在User模型中有这些类型的字段。规范化数据库。在User.id中的每个其他类中都有一个FK。
如果你必须将它们分开,那么规范化登录并使其具有多态性以引用其所有者(制造商,员工等)