Поиск объединяющей таблицы, в которой один элемент совпадает, второй элемент равен одной из двух записей - PullRequest
0 голосов
/ 07 декабря 2018

У нас есть модель Conversation и модель User.Там есть стол для соединения ConversationsUser.Конво может иметь только двух пользователей.Я хочу создать метод, который будет возвращать существующий диалог, или создать новый.

Учитывая два User с, я хочу сделать запрос вроде: Найти две ConversationsUser записи, чьи conversation_ids одинаковы для обеих записей, и user_id равно user1 и user2.

Как бы я смог построить этот запрос?

1 Ответ

0 голосов
/ 07 декабря 2018

Может поддерживаться с уникальным столбцом (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])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...