使用rails 5中的连接删除单个查询中的多个表

问题描述 投票:0回答:1

这是我在rails中的查询,我想从feedfeed 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' 
ruby-on-rails ruby-on-rails-5
1个回答
0
投票

所有的连接使事情变得复杂,但是以下工作是否有效?

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'}).delete_all

FeedMappings.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'}).delete_all
© www.soinside.com 2019 - 2024. All rights reserved.