Модель для подписок в rails

#ruby-on-rails

#ruby-on-rails

Вопрос:

Итак, у меня есть немного забавная модель: я хочу записать список пользователей, которые подписаны на определенный поток.

На данный момент у меня есть:thread has_many:подписчики

где

подписчики принимают user_id и thread_id в качестве параметров. Если найдена комбинация user_id и thread_id, пользователь подписан, в противном случае это не так.

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

Если я хочу «отписаться» от пользователя, мне нужно удалить эту комбинацию из базы данных.

Нужно ли мне использовать для этого стандартную настройку ActiveRecord или мне следует изменить ее немного более радикально? Если бы я делал это без фреймворка, у меня был бы совместный ключ task_id и user_id, но я понятия не имею, возможно ли это в rails.

Мысли о том, как действовать дальше?

Ответ №1:

Вы можете использовать ассоциацию ActiveRecord «has_many : through». Вы можете найти более подробную информацию в направляющих Rails для Active Record.

В основном вы делаете что-то вроде следующего в своей потоковой модели:

 has_many :subscriptions
has_many :subcribers, :through => :subscriptions
  

А затем выполните:

 has_many :subscriptions
has_many :subscribed_threads, :through => :subscriptions
  

в вашей модели подписчиков / пользователей.

В вашей модели подписок у вас будет следующее:

 has_many :threads
has_many :subscribers
  

Вам нужно будет создать таблицу и модель thread_subscribers, чтобы все было правильно подключено. Но в конце вы можете затем выполнить myThread.thread_subscribers и получить список подписчиков в поток или user.subscribed_threads получить подписки пользователя.

Комментарии:

1. Именно туда, куда я направлялся — я рад, что это правильный путь — большое спасибо.