Является ли: через ассоциацию правильным способом связать объединенную таблицу в Ruby on Rails - PullRequest
0 голосов
/ 24 мая 2019

У меня есть 3 таблицы с именем

Таблица пользователей,

Таблица сообщений и таблица

Message_users

и таблица Users будет использоваться для хранения информации о пользователях, в то время как таблица Messages будет использоваться для хранения сообщений, отправленных пользователями, а таблица Message_users будет хранить значения message_id и sender_id (пользователя, отправившего сообщение.) и receive_id (пользователь для получения сообщения)

В классе модели Message у меня есть

class Message < ApplicationRecord has_many :user, :through :message_user dependent: :destroy end

, а в модели User Iесть это

class User < ApplicationRecord has_many :messages, :through :message_user, dependent: :destroy end

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

1 Ответ

0 голосов
/ 24 мая 2019

Я не уверен, что понимаю ваши модели, похоже, что это что-то вроде разговора между двумя пользователями, и в нем много сообщений, но в вашей модели "message" есть много "message_users" или что-то в этом роде.Я думаю, что наименование сбивает с толку.

Лично у меня были бы следующие модели:

Conversation
  has_many :messages
  has_and_belongs_to_many :users

Message
  belongs_to :conversation
  belongs_to :sender, class_name: 'User'

User
  has_and_belongs_to_many :conversations
  has_many :messages, as: :sender

Вам не нужно действительно сохранять receive_id (это любой пользователь в разговоре, который неотправитель сообщения).Также вы можете иметь более двух пользователей в одной беседе с одной и той же конфигурацией.

Прочитайте о HasAndBelongsToMany (для этого требуется создать таблицу соединений "versations_users ", но вам не нужна модель для нее) https://guides.rubyonrails.org/association_basics.html#the-has-and-belongs-to-many-association

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

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