Может поддерживаться с уникальным столбцом (key: text
) между двумя пользователями разговора, также может быть простое решение,
class Conversation < ApplicationRecord
# Associations
has_many :conversation_users, dependent: :destroy
has_many :users, through: :conversation_users
# Validations
#add key:text in conversations table
validates :key, uniqueness: {case_sensitive: false}, :allow_blank => true
# Callbacks
before_validation :update_key
def update_key
self.key = Conversation.key_for_users(self.users)
end
# method that will return an existing conversation, or create a new one.
def self.between(users)
key = self.key_for_users(users)
conversation = Conversation.where(key: key).first_or_create
conversation.users = users
conversation.save
return conversation
end
end
=> Запрос, подобный: Найти две записи ConversationsUser, чьиИдентификаторы разговора равны для обеих записей, а user_id - user1 и user2.
conversation = Conversation.between([user1, user2])