如何执行用Arel创建的“ INTERSECT”查询?

时间:2018-06-29 10:00:07

标签: ruby-on-rails ruby activerecord arel

如何执行我使用Arel创建的相交查询?请知道我知道可以使用ActiveRecord的or()方法创建一个等效查询,我只是使用这个简单的示例来保持可管理性。我想知道的是如何执行用Arel创建的相交查询。我有以下代码来创建INTERSECT查询:

my_intersect = Photo.where(description: 'blue skies').intersect(Photo.where(id: [1,2,3,4,5]) )

我尝试了这一点(我已经读过in this post的这种用法(在他解释并集和相交的部分中)):

Photo.from(photos.create_table_alias(my_intersect, :photos))

但是我遇到了这个错误:

Photo Load (1.0ms)  SELECT  "photos".* FROM ( SELECT "photos".* FROM 
"photos" WHERE "photos"."description" = $1 INTERSECT SELECT "photos".* 
FROM "photos" WHERE "photos"."id" IN (1, 2, 3, 4, 5) ) "photos" LIMIT 
$2  [["LIMIT", 11]]
ActiveRecord::StatementInvalid: PG::ProtocolViolation: ERROR:  bind 
message supplies 1 parameters, but prepared statement "" requires 2
: SELECT  "photos".* FROM ( SELECT "photos".* FROM "photos" WHERE 
"photos"."description" = $1 INTERSECT SELECT "photos".* FROM "photos" 
WHERE "photos"."id" IN (1, 2, 3, 4, 5) ) "photos" LIMIT $2

似乎生成的查询没有从我使用Arel构建的相交中获取参数。我不知道自己是否做错了(或者自从我阅读的帖子发表以来,实现中的事情可能已经改变,并且这种做事方式不再起作用)。是否可以通过其他方式执行查询?

0 个答案:

没有答案