对Ruby on Rails Active Record结构感到困惑

时间:2012-12-17 14:15:57

标签: ruby-on-rails activerecord

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

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

user.is? :Client

我需要的是以下内容:

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

因此,当SalesPerson登录时,我可以使用User.clients来获取与它们相关的所有客户端。

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

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

  • 客户应使用用户模型
  • 拥有一个SalesAgent

查看客户端时,应该可以使用下拉列表从中选择SalesAgent。如上所述,这应该使用用户模型。

  • 客户端应该只有一个具有Client角色的Devise用户,使用User类

客户应该能够通过设计登录以访问其详细信息,跟踪订单等。

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

has_one :sales_agent, :class_name => "User"

但无法让它发挥作用。 :/

1 个答案:

答案 0 :(得分:1)

不是使用自己的单表继承方案重载User类,而是通常更好地分解db中的角色。它确实在这个阶段使事情更加清晰,并且它是一种更好的方式来存储特定于不属于任何用户的客户或销售代理的数据。 E.g:

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