如何为类似Reddit的用户类别订阅设置数据库?

时间:2018-08-05 02:22:43

标签: ruby-on-rails

我是Rails的新手,我正在尝试为允许用户订阅频道的网站设置数据库,然后将其订阅的频道内容填充到用户主页中。

我已经有我的用户表和频道表。我的第一个直觉是要像这样建立第三个数据库表:

订阅

user_id     channel_id
1            1
1            3
2            1
2            2
3            3

这是为订阅/关注系统组织数据库的标准方法吗?

很抱歉,这似乎是一个愚蠢的问题,但是我希望有一种更优雅的方法来做到这一点。

1 个答案:

答案 0 :(得分:0)

肯定是。您基本上想到了联接模型,因为该模型存储的信息属于其他模型,但其本身没有任何意义。这样做的好处是,Rails的Active Record通过这样做可以为您带来很多好处。

您可以按照以下步骤在轨道上设置这3个模型:

使用TennantPropertyInvoice的示例

class Tenant < ApplicationRecord
  belongs_to :property
  has_many :invoices, through: :properties
end

class Invoice < ApplicationRecord
  belongs_to :property
  has_many :tenants, through: :properties
end

class Property < ApplicationRecord
  has_many :tenants, dependent: :destroy
  has_many :invoices, dependent: :destroy
end

正如您在此处看到的,Property等同于您的订阅。通过这种方式设置关系的优点是支持AR,如果您创建新的Property,这将使租户与发票链接,并在属性表中插入新记录,并同时包含两个相关模型的ID。现在,当您向AR请求第一个租户时,您还可以要求提供发票:

Tennant.first.invoices

它们通过属性关联。如果您查看生成的查询,也会有所帮助。