我正在尝试构建一个类似于 CRM 的 rails 应用程序,其中我有用户,并且每次使用都有许多“客户”。
最初,我为用户和客户端创建了一个模型,但是在编写单元测试时,我意识到这两个非常相似。
所以我的问题是:我最初对它们分别建模的设计决定是否正确?或者有没有更好的方法来重用代码,即使我没有预见到客户能够真正登录到系统?
我看过类似的问题,但它们都适用于不同的用户类型和角色。在这种情况下,客户端仅作为模型存在,永远不会真正成为用户。
我正在尝试构建一个类似于 CRM 的 rails 应用程序,其中我有用户,并且每次使用都有许多“客户”。
最初,我为用户和客户端创建了一个模型,但是在编写单元测试时,我意识到这两个非常相似。
所以我的问题是:我最初对它们分别建模的设计决定是否正确?或者有没有更好的方法来重用代码,即使我没有预见到客户能够真正登录到系统?
我看过类似的问题,但它们都适用于不同的用户类型和角色。在这种情况下,客户端仅作为模型存在,永远不会真正成为用户。
在任何 CRM 应用程序中,User 和 Client 之间都有相同点和不同点。让我们放一些细节
相似之处
差异
因此,选择在两个不同的模型中分离用户和客户端、将它们组合或从父级子类化是基于您的实际需要的选择。有一些系统(例如OpenERP,如果我没记错的话)以相同的方式对待 Client 和 User ,同时定义一个is_system_user
属性。出于上述差异和安全原因,我个人会选择将它们分开。如果您不确定自己的需要,将它们分开会更安全(虽然不是 DRY'er)。
也许你应该给用户一个类型(例如通过创建一个类型模型并建立一个 has_many/belongs_to ActiveRecord 关联):这样一个用户就可以是一个客户或任何你想要的东西。
然后,您可以根据用户的类型使用cancan(一个非常棒的 gem)来管理用户权限。