Как в ruby on rails уничтожить_все или удалить_все записи, кроме одной?

Я использую плагин "acts_as_tree" для функции потока сообщений пользователя на моем сайте. У меня есть метод, который делает возможным удаление выбранных сообщений. На самом деле сообщения не удаляются. Их столбцы sender_status или recipient_status устанавливаются в 1 в зависимости от того, какой пользователь является отправителем или получателем сообщения.

В любом случае, если у обоих пользователей эти статусы установлены в единицу, то последняя строка гарантирует, что строка сообщения будет полностью удалена из базы данных. Это хорошо до тех пор, пока не удаляется родительское сообщение. Если родительское сообщение удалено, то дочерние сообщения, которые не были выбраны для удаления, больше не будут доступны.

Вот метод:

        def delete_all_users_selected_messages(message_ids, user_id, parent_id)
          Message.where(:id => message_ids, :sender_id => user_id).update_all(:sender_status => 1)
          Message.where(:id => message_ids, :recipient_id => user_id).update_all(:recipient_status => 1)
          Message.delete_all(:sender_status => 1, :recipient_status => 1, :parent_id => parent_id).where("id != ?", parent_id)
        end

Совершенно очевидно, что я пытаюсь сделать. Мне нужно, чтобы родитель игнорировался. Таким образом, если первичный ключ равен parent_id, это означает, что строка является родительской (обычно parent_id равен nil, но мне нужно было установить его в значение первичного ключа по другой причине, это долгая история и неважная). В любом случае, есть ли SQL-оператор, который я могу добавить в конец последней строки в этом методе? Чтобы убедиться, что он удаляет только те сообщения, в которых id строки не равен parent_id?

Я могу сделать так, что строка parent_id никогда не будет разрешена к удалению, пока не будет удален сам поток (таблица MessageThreads, которая ссылается на разговоры в таблице messages).

Как мне сделать так, чтобы эта родительская строка игнорировалась при выполнении метода delete_all?

С уважением

12
задан LondonGuy 22 February 2012 в 00:04
поделиться