0

我无法想出一种将我的模型构建为以下内容的方法:

我通过 Devise 拥有用户 - 用户可以担任(除其他外)销售、管理员和客户的角色。这是通过具有角色模型的 HABTM 设置的。我已经设置了一个方法,所以我可以执行以下操作

user.is? :Client

我需要的是以下内容:

  • 具有销售角色的用户可以拥有任意数量的客户。

因此,当销售人员登录时,我可以执行 User.clients 来获取与他们相关的所有客户。

  • 具有客户端角色的用户只能拥有一个客户端。

当一个新客户在线注册时,我想通过设计创建他们的用户,然后还通过嵌套值创建一个客户,链接到他们创建的用户。

  • 客户应该有一个 SalesAgent,使用 User 模型

查看客户端时,应该能够有一个下拉列表来选择 SalesAgent。如上所述,这应该使用 User 模型。

  • 客户端应该只有一个具有客户端角色的设计用户,使用用户类

客户应该能够通过设备登录以访问他们的详细信息、跟踪订单等。

如您所见,这非常令人困惑,我不确定最好的方法是什么。我唯一能想到的就是在用户和客户之间使用 HABTM,然后在表单中加入和破解以使其工作。有一个更好的方法吗?我看过也许使用

has_one :sales_agent, :class_name => "User"

但不能让它工作。:/

4

1 回答 1

1

与其使用自己滚动的单表继承方案重载 User 类,不如在 db 中拆分角色。它确实使现阶段的事情更加清晰,并且它是存储特定于不属于任何用户的客户或销售代理的数据的更好方法。例如:

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
于 2012-12-17T14:26:03.747 回答