【问题标题】:ruby on rails -- can two Models belong to each other?ruby on rails - 两个模型可以属于彼此吗?
【发布时间】:2015-11-24 19:26:36
【问题描述】:

我的小组正在为我们的课程制作一个项目管理系统,我的工作是当用户登录时,他们会看到他们参与的项目,并且列出的项目有一个当前成员的成员列表那个项目。

(以后还需要添加/删除成员函数)

我的问题是,由于该组的其他成员已经将其设置为项目属于用户,是否可以让用户属于项目以便设置此成员列表并执行我正在谈论的事情?

【问题讨论】:

    标签: ruby-on-rails ruby


    【解决方案1】:

    您所描述的关系不是一对一的:

    用户登录时,他们会看到他们所属的项目

    这意味着一个用户可以拥有多个项目。您还指定:

    [项目有]该项目的当前成员列表

    这意味着一个项目可以有多个用户

    总之,您的用户模型和项目模型之间需要多对多关系


    这是 Rails 中基本的多对多关系:

    class User < ActiveRecord::Base
      has_many :user_projects
      has_many :projects, through: :user_projects
    
    class Project < ActiveRecord::Base
      has_many :user_projects
      has_many :users, through: :user_projects
    
    class UserProject < ActiveRecord::Base
      belongs_to :user
      belongs_to :project
      validates :user_id, :project_id, presence: true
    
    • UserProject 模型是一个连接表。我在代码中所做的是明确的has_and_belongs_to_many,它让您可以更好地控制连接表。 (示例:在UserProject 表中添加role 列,包含project_creatorsimple_member 等数据)
    • UserProject 模型可以命名为Membership 更明确。我使用这两个模型的名称来制作UserProject,就像我们通常在 Rails 的命名约定中所做的那样。

    【讨论】:

    • 我可以理解属于Project的UserProject,但是如果UserProject是持有成员列表(和角色)的人,那么Users不需要属于那个吗?对不起,如果这些是愚蠢的问题。我对 ruby​​ on rails 真的很陌生。
    • 类用户已经has_many :user_projects(见我的代码)。请参阅此链接和图像,它很好地说明了多对多关系guides.rubyonrails.org/…
    • 那么,我还需要第三个还是不能只做'has_and_belongs_to_many'的事情?另外,我仍然对 Project 如何通过 UserProject 获取用户列表感到困惑?是的,它有很多用户项目,但是如果用户项目属于用户而不是相反,项目如何通过用户项目有很多用户?我真的很抱歉这一切。 =\
    • has_many :through 是更好的选择...也许阅读数据库规范化,因为这可以为创建数据库关系提供一些启示。
    • 您有个人推荐的网站或资料吗?我们还有不到三周的时间来解决这个问题,所以我现在非常着急。哈哈……呵呵……呃。 =_="
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-20
    • 1970-01-01
    • 1970-01-01
    • 2014-10-08
    • 1970-01-01
    • 2011-01-04
    相关资源
    最近更新 更多