Я сомневаюсь в том, что лучший подход к модельным отношениям при разговоре.
В моем приложении 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
.Возможно, сфера в порядке?Как бы я мог провести различие между частными и местом проведения разговорами?
Пожалуйста, сообщите мне, как я мог бы решить эту проблему или выбрать лучший подход