Я пытаюсь запретить пользователям создавать повторяющиеся чаты (в чате есть 2 пользователя). Но я понятия не имею, как проверить, существует ли чат с теми же самыми пользователями, которые уже существуют до сохранения. Rails проверяет связанные модели
тот мой метод создания в контроллере Chatroom:
def create
@chatroom = Chatroom.new
@friend = User.where(username: params[:friend]).last
@chatroom.chatroom_users.build(user: @friend, chatroom: @chatroom)
@chatroom.chatroom_users.build(user: current_user, chatroom: @chatroom)
if @chatroom.save
flash[:notice] = "chatrooom created"
redirect_to @chatroom
else
flash[:notice] = "chatrooom not created lol"
redirect_to authenticated_root_path
end
end
И это, как я пытаюсь проверить, если нет Chatroom 2 пользователей как новый:
В моем классе Chatroom
after_save :duplicate?
# Checks if chatroom containing specific users exists.
def duplicate?
user = self.users.first
friend = self.users.second
# lines below work fine - they check if there is already such chatroom
(Chatroom.all - [self]).each do |chatroom|
if ((chatroom.users & [user, friend]) - [user, friend]).empty?
self.errors.add(:chatroom, "Such chatroom already exists.")
end
end
end
проблема заключается в том:, если я использую after_save
в validatin g метод Я могу получить self.users.first, чтобы установить переменные пользователя и друга, но затем он не останавливается на создании этой записи, и я не уверен, что если ее удалить, есть хорошая идея. Во-вторых - я использую validate
вместо after_save
self.users.first и self.users.second возвращает nil, поэтому я не могу проверить наличие дубликатов.
PS: Я не хочу иметь идентификаторы пользователей в качестве атрибутов в таблице чатов, потому что я хочу добавить возможность подключения к чату столько раз, сколько вы хотите.
безусловно '' self.users.first' и self.users.second' равны нулю, прежде чем сохранить, но вы не можете проверить вместо этого 'user_id'? – kasperite