Нужен совет с моделью - стоит ли выбирать has_many через - PullRequest
1 голос
/ 25 декабря 2010

У меня есть простой блог с постами и тегами.Я хочу добавить функцию уведомления по электронной почте - пользователи могут подписаться на один или несколько тегов и получать уведомления по электронной почте при добавлении новых сообщений.

В настоящее время у меня есть модель тегов.

Будет подписчикмодель (содержащая адрес электронной почты пользователя)

Как вы думаете, мне также нужна таблица подписки, в которую входят подписчик и тег?.. или я могу пропустить это и напрямую связать подписчика с тегом?

1 Ответ

1 голос
/ 25 декабря 2010

Если вы хотите, чтобы один подписчик подписывался на несколько тегов, вам необходимо иметь отношение 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(...)

Полный список методов, которые вы можете выполнить для связейсмотрите этот раздел документации Rails .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...