我正在尝试删除两个表之间的联接的所有查询结果:
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>)
我该怎么办?
答案 0 :(得分:0)
**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