【问题标题】:Moving from a one-to-one relationship into a many-to-many relationship in rails在 Rails 中从一对一关系转变为多对多关系
【发布时间】:2011-07-01 22:44:11
【问题描述】:

正如标题所说,我想在我的 rails 3 应用程序中从一对一关系转变为多对多关系。

我现在对 Rails 相当熟悉,但我对数据库和迁移缺乏很好的理解。

目前,我有一个项目和用户模型。一个项目属于_一个用户,一个用户拥有_许多项目。 我想进入一个项目可以有许多用户同时协作的情况。

我很确定我需要建立一个 has_many :through 类型的关系,但我也很好奇如何将所有现有项目和用户迁移到这种类型的系统中。

谢谢!

【问题讨论】:

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


    【解决方案1】:

    您需要另一个将两个表链接在一起的表。这就是支持多对多关系的方法。

    例如假设您有两个这样的表:

    Projects
    ----------
    projectid
    {other columns}    
    
    Users
    -------
    userid
    {other columns}
    

    新表将如下所示: 新表

    Projects_Users
    --------------
    projectid
    userid
    

    现在您可以通过简单地将用户 ID 和项目 ID 添加到项目中来添加另一个用户 Projects_Users 表。同样,您可以将多个用户添加到同一个表中的一个项目中。

    该表的主键是复合键 projectid 和 userid。

    【讨论】:

    • 好的,我现在已经建立了关系。如何将所有现有项目和用户迁移到这种新格式?
    【解决方案2】:

    好的,我现在已经建立了关系。如何将所有现有项目和用户迁移到这个新的 format 表中?

    嗯,这取决于您现在如何设置表格;如何实现这两种现有关系; ProjectUser 数据位于旧表中。发布您的 DDL。你应该可以简单地INSERT ProjectUser SELECT FROM ...。我们需要完成那个 FROM。

    行数也是相关的;如果它很大,您可能需要将其分成几批。

    【讨论】:

    • 好吧听起来不错,我的表现在大约有几千行。我正在使用 sqlite3,不确定这是否是 DDL 的意思(再次,我的数据库知识有限)
    • @马特。几千是很小的。数据定义语言是指您的 CREATE TABLE & INDEX 语句,以完成上述命令。
    • @马特。有没有机会推进这个问题/答案?
    • 嘿抱歉,我通过在迁移中放置一个简单的循环并在该循环中分配我需要的值来让它工作。不过感谢您的帮助!
    猜你喜欢
    • 1970-01-01
    • 2018-10-03
    • 1970-01-01
    • 2018-06-15
    • 2012-08-22
    • 1970-01-01
    • 1970-01-01
    • 2018-09-27
    • 2011-03-30
    相关资源
    最近更新 更多