【问题标题】:Rails 3. How to model people?Rails 3. 如何为人建模?
【发布时间】:2011-10-26 23:52:21
【问题描述】:

我有这个发票应用程序。

目前我有这 4 个模型:

人:

  • 联系人(他们就像客户,他们会收到发票)
  • 用户(发送发票的人)
  • 公司(用户属于公司)
  • 组织(联系人属于组织)。

当前的设置并没有真正点击。感觉不自然。

我想到的另一个选择是创建一个属于组织的人员模型。

人,会有一列type_id(类型:client、admin,以后会添加更多)

但我不知道,不知何故,感觉 type_id 列不应该只引用一个两行表。

在这种情况下您会使用什么模型设置?

---- 为澄清而添加: ----

请记住,在不久的将来,一些客户将能够登录。 注意:如果客户只是个人,那么他将不属于组织。

用户代表登录并发送发票的人。他属于一家公司。

联系人代表被开发票的人,他可能属于也可能不属于某个组织。

【问题讨论】:

    标签: ruby-on-rails ruby models


    【解决方案1】:

    Polymorphic associations 可能会对您的情况有所帮助。

    由于所有实体都是人,您可以实现如下所示:

    【讨论】:

      【解决方案2】:

      根据我的经验,single-table inheritance 方法适用于具有不同逻辑的多个用户类。

      但是如果你有一个完全分离的Contact和User,而Contacts甚至不能登录或者不与Users共享字段,你应该把它做成一个单独的模型。

      【讨论】:

      • 未来应该增加客户(或获得发票的人)登录的能力。
      • 在最近的一个项目中,我们有一个用于存储数据的Partner 模型和一个用于登录的PartnerUser < User
      【解决方案3】:

      您当前的设置对我来说似乎还不错。

      如果联系人和用户会因不同的数据要求而大不相同(我猜他们会这样),那么单表继承会带来更多挑战。可以这样想:如果您要根据是用户还是联系人来拥有一堆空列,则不要使用 STI。如果空字段很少,那么就可以了。

      公司和组织字段有多重要?将要发送发票的联系人可以只有公司名称和地址的文本字段吗?也许这将有助于简化事情。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-08-19
        • 2012-02-25
        • 1970-01-01
        • 2011-07-05
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多