我是Rails的新手,我正在尝试为允许用户订阅频道的网站设置数据库,然后将其订阅的频道内容填充到用户主页中。
我已经有我的用户表和频道表。我的第一个直觉是要像这样建立第三个数据库表:
订阅
user_id channel_id
1 1
1 3
2 1
2 2
3 3
这是为订阅/关注系统组织数据库的标准方法吗?
很抱歉,这似乎是一个愚蠢的问题,但是我希望有一种更优雅的方法来做到这一点。
答案 0 :(得分:0)
肯定是。您基本上想到了联接模型,因为该模型存储的信息属于其他模型,但其本身没有任何意义。这样做的好处是,Rails的Active Record通过这样做可以为您带来很多好处。
您可以按照以下步骤在轨道上设置这3个模型:
使用Tennant
,Property
和Invoice
的示例
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
它们通过属性关联。如果您查看生成的查询,也会有所帮助。