Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 获取两个表中存在的所有记录_Ruby On Rails_Ruby On Rails 4_Activerecord_Rails Activerecord_Rails Models - Fatal编程技术网

Ruby on rails 获取两个表中存在的所有记录

Ruby on rails 获取两个表中存在的所有记录,ruby-on-rails,ruby-on-rails-4,activerecord,rails-activerecord,rails-models,Ruby On Rails,Ruby On Rails 4,Activerecord,Rails Activerecord,Rails Models,以下是两个表格,其中包含一些示例数据:- 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:

以下是两个表格,其中包含一些示例数据:-

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中有这两个模型。
现在在我的控制器中,如果媒体表中存在id,我想获取上传中的所有记录,即id为3和6的上传表中的记录

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

ids = Media.all.ids
Upload.where(id: ids)
还是作为一行

Upload.where(id: Media.all.ids)
这将返回上载表中ID存在于媒体表中的所有记录

您需要的是连接条件必须是表ID的位置

Upload.joins("INNER JOIN medias ON media.id = uploads.id")
这将转化为:

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

如本文所述,
Upload.where(id:Media.all)
也将执行单个查询


因此这两个选项都将返回媒体表中ID存在的所有上传记录

您可以在通话中进行子查询

我觉得应该是这样的

Upload.where(media\u id:media.all.map(&:id))


我希望这会有帮助

共享id?因此,唯一要返回的记录是
id:6,file\u ref:abc5
,因为
id 3
在表介质中不存在?您可以将**abc5**的值更改为5吗?或者您必须先将数字取出,然后在上传中存在findAll介质,但是文件_ref只在上传中可用,这正是我想要的。因此,我必须从uploads表中获取id为6和3的两条记录。Mark,这样做的缺点是,您要对数据库执行两个查询,一个查询
媒体.all.id
,另一个查询
上传.where
。对于内部连接,您只需要执行一个操作。
Upload.where(id:Media.all)
将使用嵌套的
SELECT medias.id[…]从媒体执行一个SQL查询
——但假设媒体上传关系仅由@MrYoshiji提到的
id
的相等性定义,而没有
id
,这是很奇怪的,它将执行单个查询