Каковы правильные отношения между этими моделями в Rails? - PullRequest
0 голосов
/ 09 июля 2020

Мне нужна помощь в продумывании соответствующих отношений между моими моделями в приложении Rails.

В моем приложении я хотел бы, чтобы пользователи могли следить за тем, что публикуют другие пользователи, на основе тем. Так, например, пользователь A может захотеть подписаться на пользователя B, но только когда пользователь B пишет о темах X и Y (а не Topi c Z). Темы будут похожи на теги в приложении, где пользователь может пометить сообщение одной или несколькими темами.

Вот как это может выглядеть:

Пользователь A следует за пользователем B по темам X и Y

Пользователь B следует за пользователем A в темах G и H

Пользователь C следует за пользователем A в Topi c D

Пользователь C следует за пользователем B в Темы P и Q

Я знаю, что мне нужны модели для User, Topi c и Post, и, вероятно, какие-то модели соединения. Но я не уверен, что структура таблиц соединения и соответствующие отношения Active Record будут здесь использоваться.

Благодарю за вашу помощь!

1 Ответ

1 голос
/ 09 июля 2020

Я бы предложил следующее, с таблицей соединения под названием users_topics

class User < ApplicationRecord
  has_many :users_topics, dependent: :destroy
  has_many :followed_user_topics, class_name: User, through: :users_topics
end

class UsersTopic < ApplicationRecord
  belongs_to :topic
  belongs_to :user
  belongs_to :followed_user, class_name: User, foreign_key: :followed_user_id
end

class Topic < ApplicationRecord
  has_many :users_topics, foreign_key: :followed_user_id
  has_many :following_users, :class_name User, through: :users_topics

  # there doesn't seem to be a reason to declare the other user association, 
  # which is also achieved through users_topics
end

Итак, если у нас есть:

     model     id
     User A    1
     User B    2
     Topic X   1
     Topic Y   2

Тогда таблица users_topics будет содержать:

     id        user_id     followed_user_id topic_id
     1            1            2               1
     2            1            2               2

Итак, у пользователя A есть экземпляр UsersTopi c для пользователя B и Topi c X, а также есть экземпляр UsersTopi c для пользователя B и Topi c Y.

и так далее для каждого другого сценария ios, который вы описываете

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