Пара способов сделать это
Во-первых, это триггер после удаления , это довольно противоречивый способ сделать что-то, если вы верите в ложное обещание агностицизма в отношении базы данных, однако он работает - по сути, вы смотрите на старое. peer_id и old.user_id, а затем выполните удаление, но поменялись ролями. Если вы хотите пойти по этому пути, вам следует обратиться к руководству по базе данных, чтобы узнать, как реализовать триггер.
Второй способ - это after_destroy
обратный вызов , где вы делаете
after_destroy do |record|
other = Relationship.find_by_user_id_and_peer_id(record.peer_id, record.user_id)
other.destroy if other
end
Другая, и, возможно, более радикальная мера - это переработать модель, чтобы она имела логически допустимое поле, в котором обе стороны отношения моделируются одной записью в базе данных, есть ограничения на записи, где (peer_id, user_id) = (user_id, peer_id)
, Таким образом, вам не придется беспокоиться об удалении обеих сторон или дублировании записей.