需要有模型的建议 - 我应该选择has_many

时间:2010-12-25 08:49:53

标签: ruby-on-rails

我有一个包含帖子和标签的简单博客。我想添加电子邮件通知功能 - 用户可以订阅一个或多个标签,并在添加新帖子时接收电子邮件通知。

目前我有一个Tag模型。

将有一个订阅者模型(包含用户的电子邮件)

您认为我还需要订阅者表和订阅者加入的订阅表吗? ..或者我可以跳过它并直接将订户与标签链接?

1 个答案:

答案 0 :(得分:1)

如果您希望一个订阅者订阅多个标记,则订阅者和标记之间需要has_and_belongs_to_many关系。

要完成此任务,您需要创建一个所谓的连接表:

create_table :subscribers_tags, :id => false do |t|
  t.references :subscriber, :tag
end

这将创建一个没有id列的表,但subscriber_idtag_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