Это мой запрос в рельсах, я хочу удалить записи из таблицы feed
и feed mappings
, которые соответствуют определенным условиям в одном запросе. Если я использую destroy_all
, он удаляет элементы один за другим, сначала он удалитfeed и затем feed_mappings для каждой записи, тогда как если я могу просто изменить оператор Select
в результирующем запросе на Delete feed, feed_mappings
, я могу удалить все в одном запросе.Помогите мне решить эту проблему в одном запросе.
Feed.joins(:feed_mappings)
.joins('inner join notifications on notifications.id = feed_mappings.source_id')
.joins('inner join user_feedbacks on user_feedbacks.source_id = notifications.picked_for_company')
.joins('inner join user_feedback_contexts on user_feedback_contexts.user_feedback_id = user_feedbacks.id')
.where(user_feedbacks: {source_type: 'Company', user_id: user.id},
user_feedback_contexts: {context: 'block'},
notifications: {user_id: user.id},
feed_mappings: {source_type: 'Notifications::Notification'})
Это генерирует
SELECT `feeds`.* FROM `feeds`
INNER JOIN `feed_mappings`
ON `feed_mappings`.`feed_id` = `feeds`.`id`
INNER JOIN notifications
ON notifications.id = feed_mappings.source_id
INNER JOIN user_feedbacks
ON user_feedbacks.source_id = notifications.picked_for_company
INNER JOIN user_feedback_contexts
ON user_feedback_contexts.user_feedback_id = user_feedbacks.id
WHERE `user_feedbacks`.`source_type` = 'Company'
AND `user_feedbacks`.`user_id` = 6
AND `user_feedback_contexts`.`context` = 'block'
AND `notifications`.`user_id` = 6
AND `feed_mappings`.`source_type` = 'Notifications::Notification'
Что я хочу вместо
DELETE `feeds`, `feed_mappings` FROM `feeds`
INNER JOIN `feed_mappings`
ON `feed_mappings`.`feed_id` = `feeds`.`id`
INNER JOIN notifications
ON notifications.id = feed_mappings.source_id
INNER JOIN user_feedbacks
ON user_feedbacks.source_id = notifications.picked_for_company
INNER JOIN user_feedback_contexts
ON user_feedback_contexts.user_feedback_id = user_feedbacks.id
WHERE `user_feedbacks`.`source_type` = 'Company'
AND `user_feedbacks`.`user_id` = 6
AND `user_feedback_contexts`.`context` = 'block'
AND `notifications`.`user_id` = 6
AND `feed_mappings`.`source_type` = 'Notifications::Notification'