【问题标题】:How to model Companies and Persons in a Ruby on Rails app?如何在 Ruby on Rails 应用程序中为公司和人员建模?
【发布时间】:2012-10-10 12:47:20
【问题描述】:

我是 Rails 新手,我正在尝试构建一个应用程序,其中一个 用户 可以拥有多个 组织,而这些组织可以拥有多个 个人反过来可以有许多项目

这些是我的模型(有意义吗?):

用户 ---

现在我的关键问题是,如果一个人根本不属于任何公司,会发生什么?我的应用程序还能正常工作吗?我还能访问项目吗,例如像这样......

current_user.persons.projects

...尽管没有公司?

可能有一种相当简单的方法可以在 Rails 中对这些表进行建模,但由于某种原因,我无法理解这一点。感谢您的帮助。

【问题讨论】:

    标签: ruby-on-rails ruby ruby-on-rails-3 database-design


    【解决方案1】:

    个人和组织不是等级关系。它看起来像一个,但它不是。这是一个图表。

    一个组织可以有 0+ 个子组织。随着时间的推移,它可以拥有 0+ 名员工,并且一个人可以同时为多个组织工作。

    您还可以向个人或组织出售或购买,因此您必须将它们建模为相同的超类型。

    这被称为派对模式,我建议在开始之前在这里阅读它。

    【讨论】:

      【解决方案2】:

      通过关联,您可以建立一个结构,正如 ge0man 在答案中所发布的那样。

      使用validations,您可以确保模型在保存/更新之前具有所需的正确属性。

      如果你不调用像 User.projects 这样的函数,它只会返回一个空数组,因为没有找到列出给该用户的项目 :)

      【讨论】:

      • 好的,谢谢。实际上,我已经在广泛使用验证。我只是想知道我的模型设置是否能正常工作。
      • 如果您需要用户:validate_presence_of :user_id 在公司模型中。如果您不验证存在并调用@company.user,它将返回 User 对象,如果未设置,则返回 nil。相反,如果您调用@company.user.companies,它将返回当前公司的用户链接到的所有公司。 (它在后台生成SELECT * FROM companies WHERE user_id = {user.id}
      【解决方案3】:

      你想研究使用

      belongs_to 和 has_many 在您的模型中。

      查看下面的指南。

      http://guides.rubyonrails.org/association_basics.html

      【讨论】:

        【解决方案4】:

        现在我的关键问题是如果一个人不属于 任何公司?我的申请还能用吗,我还能用吗? 能够访问项目,例如像这样...

        您的关键问题的答案是:是的,任何用户都可以访问属于没有公司的人的项目,因此:

        Project.all
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2011-08-21
          • 1970-01-01
          • 2011-06-27
          • 2014-05-15
          • 2014-11-05
          • 2021-12-17
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多