我有一个包含帖子和标签的简单博客。我想添加电子邮件通知功能 - 用户可以订阅一个或多个标签,并在添加新帖子时接收电子邮件通知。
目前我有一个Tag模型。
将有一个订阅者模型(包含用户的电子邮件)
您认为我还需要订阅者表和订阅者加入的订阅表吗? ..或者我可以跳过它并直接将订户与标签链接?
答案 0 :(得分:1)
如果您希望一个订阅者订阅多个标记,则订阅者和标记之间需要has_and_belongs_to_many
关系。
要完成此任务,您需要创建一个所谓的连接表:
create_table :subscribers_tags, :id => false do |t|
t.references :subscriber, :tag
end
这将创建一个没有id
列的表,但subscriber_id
和tag_id
。然后,您指定关系:
class Subscriber < ActiveRecord::Base
has_and_belongs_to_many :tags
end
class Tag < ActiveRecord::Base
has_and_belongs_to_many :subscribers
end
然后,您可以访问和操作代码中的关系:
Subscriber.first.tags # => [<Tag>, <Tag>, ...]
Tag.first.subscribers # => [<Subscriber>, ...]
Subscriber.find(123).tags << Tag.find(321)
Tag.find(321).subscribers << Subscriber.new(...)
有关可以对关联执行的方法的完整列表,请参阅this section of the Rails documentation。