У меня есть кнопка под названием разговор, когда пользователь нажимает на нее, она создает разговор как запись в базе данных. Проблема в том, что если есть 3 пользователя userA, userB и userC,
Если пользователь B нажмет на кнопку разговора, чтобы отправить сообщение userA, это создаст запись разговора. но затем, если пользователь C нажмет на кнопку разговора, чтобы отправить сообщение userA, запись не сохранится, и я получу откат
контроллер разговора:
class ConversationsController < ApplicationController
before_action :authenticate_user!
def index
@conversations = Conversation.involving(current_user)
end
def create
if Conversation.between(params[:sender_id], params[:recipient_id]).present?
@conversation = Conversation.between(params[:sender_id], params[:recipient_id]).first
else
@conversation = Conversation.create(conversation_params)
end
redirect_to conversation_messages_path(@conversation)
end
private
def conversation_params
params.permit(:sender_id, :recipient_id)
end
end
ошибка происходит в этой строке
redirect_to conversation_messages_path(@conversation)
модель разговора:
class Conversation < ApplicationRecord
belongs_to :sender, foreign_key: :sender_id, class_name: "User"
belongs_to :recipient, foreign_key: :recipient_id, class_name: "User"
has_many :messages, dependent: :destroy
validates_uniqueness_of :sender_id, :recipient_id
scope :involving, -> (user) {
where("conversations.sender_id = ? OR conversations.recipient_id = ?", user.id, user.id)
}
scope :between, -> (user_A, user_B) {
where("(conversations.sender_id = ? AND conversations.recipient_id = ?) OR (conversations.sender_id = ? AND conversations.recipient_id = ?)", user_A, user_B, user_B, user_A)
}
end
ошибка произошла из-за этой строки
validates_uniqueness_of :sender_id, :recipient_id