如何执行我使用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构建的相交中获取参数。我不知道自己是否做错了(或者自从我阅读的帖子发表以来,实现中的事情可能已经改变,并且这种做事方式不再起作用)。是否可以通过其他方式执行查询?