Ruby on rails 对RubyonRails活动记录结构感到困惑

Ruby on rails 对RubyonRails活动记录结构感到困惑,ruby-on-rails,activerecord,Ruby On Rails,Activerecord,我很难想出一种方法来将我的模型结构如下: 我通过Desive拥有用户-用户可以扮演销售、管理员和客户等角色。这是通过具有角色模型的HABTM设置的。我已经设置了一个方法,以便可以执行以下操作 user.is? :Client 我需要的是: 具有销售角色的用户可以拥有任意数量的客户端 因此,当销售人员登录时,我可以执行User.clients来获取与他们相关的所有客户 具有客户端角色的用户只能有一个客户端 当一个新的客户端在线注册时,我想通过designe创建他们的用户,然后通过嵌套值创

我很难想出一种方法来将我的模型结构如下:

我通过Desive拥有用户-用户可以扮演销售、管理员和客户等角色。这是通过具有角色模型的HABTM设置的。我已经设置了一个方法,以便可以执行以下操作

user.is? :Client
我需要的是:

  • 具有销售角色的用户可以拥有任意数量的客户端
因此,当销售人员登录时,我可以执行User.clients来获取与他们相关的所有客户

  • 具有客户端角色的用户只能有一个客户端
当一个新的客户端在线注册时,我想通过designe创建他们的用户,然后通过嵌套值创建一个客户端,链接到他们创建的用户

  • 客户机应该有一个SalesAgent,使用用户模型
在查看客户机时,应该能够从下拉列表中选择SalesAgent。如上所述,这应该使用用户模型

  • 客户机应该只有一个designe用户,角色是客户机,使用User类
客户应能够通过Desive登录以访问其详细信息、跟踪订单等

正如你所看到的,这令人难以置信地困惑,我不确定最好的办法是什么。我能想到的唯一一件事就是在用户和客户端之间使用HABTM,然后在表单中加入和破解,使其工作。有更好的方法吗?我已经考虑过使用

has_one :sales_agent, :class_name => "User"

但无法使其工作:/

与其使用滚动您自己的单表继承方案重载用户类,不如在数据库中划分角色。在这个阶段,它确实让事情变得更清楚,而且它是存储特定于客户或销售代理的、不属于任何用户的数据的更好方法。例如:

class User < ActiveRecord::Base
  has_many :clients
  has_many :sales_agents
end

class Client < ActiveRecord::Base
  belongs_to :user
  belongs_to :sales_agent
end

class SalesAgent < ActiveRecord::Base
  belongs_to :user
  has_many :clients
end
class用户
我曾想过这样做,但后来我不得不更改一堆已经存在的数据。我想这将是最容易维护的解决方案。谢谢