Rails моделирует ассоциации ActiveRecord в чатах и ​​разговорах с несколькими пользователями - PullRequest
0 голосов
/ 13 мая 2018

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

В моем приложении Users, Conversations, UserConversations, Venues, & VenueConversations.

У пользователей может быть много Conversations & Conversations может быть много Users.Таким образом, таблица мостов (UserConversations).

Места проведения могут , также имеют Conversations, и эти Conversations могут , также имеют много Users.Таким образом, таблица мостов (VenueConversations)

Я пробовал ее с полиморфными ассоциациями, но затем Messages в Conversations стало трудно управлять.Кроме того, некоторое время назад я задал вопрос о стеке, и кто-то сказал, что я должен держаться подальше от полиморфных ассоциаций любой ценой.

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

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


User.rb

class User < ApplicationRecord
  has_many :user_conversations
  has_many :conversations, through: :user_conversations

  has_many :venue_conversations
  has_many :conversations, through: :venue_conversations
end

UserConversation.rb

class UserConversation < ApplicationRecord
  belongs_to :user
  belongs_to :conversation
end

Venue.rb

class Venue < ApplicationRecord
  has_many :venue_conversations
  has_many :conversations, through: :venue_conversations
end

VenueConversations.rb

class VenueConversations < ApplicationRecord
  belongs_to :user
  belongs_to :venue
  belongs_to :conversation
end

Проблема, с которой я сейчас сталкиваюсь, заключается в том, что когда я делаю User.first.conversations, я нахожу только один из типов разговоров, которые User может иметь (Private против Venue).Он отражает последнее определение, которое я дал has_many :conversations в модели User.rb.Возможно, сфера в порядке?Как бы я мог провести различие между частными и местом проведения разговорами?

Пожалуйста, сообщите мне, как я мог бы решить эту проблему или выбрать лучший подход

...