下面是两张包含一些样本数据的表格: -
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
我在轨道上有这两个型号。 现在在我的控制器中,如果他们的id存在于媒体表中,我希望获得上传中的所有记录,即上传表中带有ID 3和6的记录。
答案 0 :(得分:0)
你们之间是否建立了关系?从你的声音中你没有(你真的应该),但如果你还没有尝试:
ids = Media.all.ids
Upload.where(id: ids)
或作为一行
Upload.where(id: Media.all.ids)
这将返回上传表中具有媒体表中存在的ID的所有记录。
答案 1 :(得分:0)
您需要的是INNER JOIN,其中连接条件必须是表格的ID
Upload.joins("INNER JOIN medias ON media.id = uploads.id")
这将被翻译为:
"SELECT `uploads`.* FROM `uploads` INNER JOIN media ON media.id = uploads.id"
编辑:
正如MrYoshiji中comment所述,Upload.where(id: Media.all)
也会进行一次查询。
因此,两个选项选项都将返回媒体表中存在的所有上传记录
答案 2 :(得分:0)
您可以在通话中执行子查询
我认为它应该看起来像这样
Upload.where(media_id: Media.all.map(&:id))
我希望它有所帮助