获取两个表中都存在的所有记录

Get all records that exist in both the tables

下面是两个 tables 和一些示例数据:-

Uploads:  
id: 1 , file_ref:abc  
id: 2, file_ref: abc1  
id: 4, file_ref: abc3  
id: 5, file_ref: abc4  
id: 6, file_ref: abc5  
id: 7, file_ref: abc6  

media:  
id: 3, name: 'My Doc' , type: doc  
id: 6, name: 'My Img' , type: img  

我在 rails 中有这 2 个模型。 现在在我的控制器中,如果它们的 ID 存在于媒体 table 中,我想获取上传中的所有记录,即来自上传 table 的 ID 为 3 和 6 的记录。

你和他们建立关系了吗?听上去你还没有(你真的应该),但如果你还没有那么试试:

ids = Media.all.ids
Upload.where(id: ids)

或作为一行

Upload.where(id: Media.all.ids)

这将 return 您上传 table 的所有记录,其 ID 存在于媒体 table 中。

你需要的是INNER JOIN,其中加入条件必须是table

的ID
Upload.joins("INNER JOIN medias ON media.id = uploads.id")

这将被翻译成:

"SELECT `uploads`.* FROM `uploads` INNER JOIN media ON media.id = uploads.id"

编辑:

MrYoshiji said in this 一样,Upload.where(id: Media.all)也会做单次查询。

所以这两个选项选项都会return所有ids存在于媒体中的上传记录table

您可以在调用中进行子查询

我认为它应该看起来像这样

Upload.where(media_id: Media.all.map(&:id))

希望对你有帮助