【问题标题】:bottom up rails app associations自下而上的 Rails 应用程序关联
【发布时间】:2012-12-30 15:16:12
【问题描述】:

我正在自下而上构建一个 Rails 应用程序,需要一些关于模型关联的指导。

我们有客户并让他们参与多个项目。 客户的用户(他们的员工)从事项目工作并通过文件和注释为项目做出贡献。 我们还与客户合作开展项目(添加文件、注释)。 项目有贡献者(可能是另一个客户的一部分的用户或分包商)做出贡献(文件、注释)。

因此,在模型方面,我想确保正确捕捉所有内容。这就是我所拥有的,但我不确定它是否可以,并且对其他协会持开放态度。

Client
 has_many :projects
 has_many :users

Project
 belongs_to :client
 has_and_belongs_to_many :contributors
 has_and_belongs_to_many :contributions

User
 belongs_to :client
 belongs_to :contributor
 has_many :contributions

Contributor
 has_and_belongs_to_many :projects
 has_one :user
 has_many :contributions

Contribution
 has_and_belongs_to_many :projects
 belongs_to :contributor

我认为贡献将与文件和笔记的模型相关联;项目可能与“下一步”模型相关联......我认为都是嵌套资源。

谢谢

【问题讨论】:

  • 拆分用户和贡献者模型的目的是什么?为什么不能是一个模型?
  • 有时来自一个客户的用户可能会为另一个客户的项目做出贡献,或者用户可能无法访问一个项目... 想法是以项目为基础存储贡献者。不是用户,而是用户的参考(可能是连接表)。不必要?谢谢。

标签: ruby-on-rails model associations


【解决方案1】:

您查看过the guide on associations 吗?您是否做过任何类型的模型域的纸质原型来阐明所有这些关联?这些是过程中的重要部分,对于任何中等复杂的问题领域来说,对于顺利完成任务都很重要。

我可能会将Contribution 上的:contributor 关联设为has_one 关联而不是belongs_to,但这可能只是偏好。我也同意Phobos98 的观点,即ContributorUser 是不必要的区别。我认为Contribution 是一个构思非常好的模型,用于将用户操作与项目相关联。大多数身份验证框架(如Devise)允许您指定角色,而cancan 之类的框架允许您对权限进行细粒度控制。

就嵌套资源而言,这确实与您的应用如何使其数据可用有关。就像盖房子一样。你把墙竖起来,里面有人和财物,但窗户(路线)的数量决定了谁可以看到什么。是的,提供这些路线很有帮助,但一开始并不需要它们以确保数据模型到位。

您是否真的尝试过这里的模型并查看它是否有效?使用脚手架,您可以快速尝试,Rails 使更改数据模型变得轻而易举,因此您没有理由不能更灵活一点。只需尝试一下,找出哪些有效,哪些无效。然后,您就会知道需要改变什么。

【讨论】:

  • 感谢这里的一切。我在没有 ROR 的情况下旅行,并计划在 iPad 上进行此操作。我在飞机上阅读了一本学习指南书的所有关联文档和关联章节。旅行结束后我会试试的。在那之前,我正在努力更好地理解“底层”。生病画出表格,听起来像是一种很好的计划方式,一直在我的脑海中做......谢谢,我计划将自己的身份验证滚动到应用程序(授予访问权限),因为我认为模型交互将从那里决定.谢谢!
  • 是的,几乎没有什么好的替代品可以代替实际运行代码并查看哪些有效,哪些无效。在 iPad 上使用 OmniGraffle 之类的东西是规划此类关系的好方法,但铅笔和纸可以快速且容易地扔掉,因此不必担心犯错。 :) 祝你好运。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多