Rails将delete_if转换为sql语句

Rails将delete_if转换为sql语句,sql,ruby-on-rails,ruby-on-rails-4,Sql,Ruby On Rails,Ruby On Rails 4,我使用delete_编写了一个异常,如果遇到问题,我希望使用SQL语句或使用active record的东西 以下是我的delete_if语句: Format.all.delete_if { |f| ( f.location_ids.sort & User.current.location_ids.sort ) == User.current.location_ids.sort } 基本上,该语句是如果所有用户位置标识都包含在格式位置标识中,然后删除 我不完全理解你的问题,但也许这段代

我使用delete_编写了一个异常,如果遇到问题,我希望使用SQL语句或使用active record的东西

以下是我的delete_if语句:

Format.all.delete_if { |f| ( f.location_ids.sort & User.current.location_ids.sort ) == User.current.location_ids.sort }

基本上,该语句是如果所有用户位置标识都包含在格式位置标识中,然后删除

我不完全理解你的问题,但也许这段代码就是你想要的:

current_user_location_ids = User.current.location_ids.sort

formats_to_destroy = Format.all.to_a.select do |format|
  format.location_ids.sort == current_user_location_ids
end

formats_to_destroy.map(&:destroy)

注意:它实际上会破坏数据库中的记录

为了确认,您正在询问如何将该活动记录语句转换为普通的“ol SQL查询”?如果是这样的话,我很困惑,因为这是一个数组函数;它不会影响数据库级别上的任何内容。因为您想知道执行删除操作的SQL,所以应该在问题中包含相关的表结构。delete\u if正在从查询中删除项。我需要的是一个查询,它只选择我需要的内容,而不是全选然后从数组中删除。这有意义吗?@NathanBiles我认为我们还没有足够的信息来帮助你建立这样一个查询。如果您可以描述Format和User I guess?的表结构,并用简单的英语描述查询应该提取或过滤出的内容,那将非常有用。从您现在的语句来看,似乎您想要调出与当前用户没有相同位置ID列表的所有格式?