Rail 4:如何删除所有具有联接结果的查询

时间:2019-01-05 08:57:05

标签: ruby-on-rails-4

我正在尝试删除两个表之间的联接的所有查询结果:

availabilitiesToDelete = Mmk::Availability.find_by_sql(["SELECT a.id
                                              FROM mmk_availabilities a, mmk_resources r 
                                              WHERE a.resource_id = r.id
                                              AND r.company_id = ?", mmkCompany.id])              
              availabilitiesToDelete.delete_all

但是我遇到了错误

NoMethodError (undefined method `delete_all' for #<Array:0x007fa657f2a4e0>)

我该怎么办?

2 个答案:

答案 0 :(得分:0)

rails-4中的

**Its worked for me !** db.collection('roles').aggregate([ { $unwind: "$permissions" }, { $lookup:{ from: "permissions", localField: "permissions._id", foreignField: "_id", as: "permissions.permissionObj" } }, { $project:{ "roleName":1, permissions: { "_id":'$permissions._id', "assignPermission":'$permissions.access', "groupName": { $arrayElemAt: [ '$permissions.permissionObj.permissionGroups', 0 ] }, "allPermission": { $arrayElemAt: [ '$permissions.permissionObj.permissions', 0 ] } } } }, { $group: { _id: "$_id", roleName: { $first: '$roleName' }, permissions: { $push: "$permissions" } } }, { $sort:{ _id:1 }} ]); 返回{{ $errors->first('input_name') }} 对象,而不是find_by_sql对象。 Array是AR查询,会因您的情况而引发错误。

也许您可以继续进行下去,

ActiveRecord::Relation

答案 1 :(得分:0)

正如ray在他的回答中指出的那样,find_by_sql将返回一个Array,因此您无法在其上调用delete_all

但是,您可以使用第二个查询一次删除所有记录,而不会引起如下n + q查询:

Mmk::Availability.where(id: availabilitiesToDelete.map(&:id)).delete_all