【问题标题】:Creating multiple relationships in rails with same datatypes在具有相同数据类型的 Rails 中创建多个关系
【发布时间】:2010-03-29 19:45:20
【问题描述】:

我正在尝试做的是这样的:

例如,我有数据类型“用户”和“文章”。我想在这两者之间建立关系,但方式不止一种。

例如,我想让用户“喜欢”或“收藏”一篇文章。所以我需要在数据库中有两种关系,一种用于用户喜欢文章,另一种用于用户收藏,因此例如制作“user_article”表是不够的,对吗?

最好的方法是什么?

【问题讨论】:

    标签: ruby-on-rails database database-relations


    【解决方案1】:

    您所描述的是“数据模型”而不是“数据类型”。数据类型 = 字符串、整数等。如果它是一个 Active Record 对象,它是一个数据模型或更具体地说是一个 Active Record 模型。

    Eimantas 指出您描述的是两个“has_many”关系,而不是他帖子中所写的“have_many”。在他的示例中,书签称为连接模型。请记住,您可以将其他东西放在连接模型中,并使用那里的关系来完成任务。假设您想要一个书签订单或一个最喜欢的排名 - 连接模型就是这样做的理想点。

    精简示例:

    class Article < ActiveRecord::Base
      has_many :users, :through => :user_bookmarks
    end
    
    class UserBookmark < ActiveRecord::Base
      belongs_to :user
      belongs_to :article
    end
    
    class User < ActiveRecord::Base
      has_many :user_bookmarks
      has_many :articles, :through => :user_bookmarks
    end
    

    了解基础知识后需要注意的事项: 计数器缓存 - 如果您正在计数,它们就是您的朋友。

    使用这 2 个连接模型可能更容易和更简洁,而不是现在尝试深入研究多态性。在你启动并运行它之后,你可以继续探索它。

    【讨论】:

      【解决方案2】:

      我建议有bookmarking_typeBookmarking 模型(注意type 是为RoR 保留的)。然后你可以has_many :bookmarkingshas_many :liked_articles, :through =&gt; :bookmarkingshas_many :bookmarks, :through =&gt; :bookmarkings。当然,您应该添加条件或只是将 SQL 加入这些关联,但一切都应该是好的。我确实相信甚至有插件,只是想不起名字atm。

      【讨论】:

      • 好的,所以我创建了一个仅用于关系的新数据类型?我要试一试!
      • 谢谢,尼克,解决了!虽然我确实尝试过使用句子流。)
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-06-26
      • 1970-01-01
      • 2021-11-26
      • 1970-01-01
      • 1970-01-01
      • 2018-10-05
      • 1970-01-01
      相关资源
      最近更新 更多