[英]Rails Activerecord Relation: using subquery as a table for a SQL select statement
[英]How to pass a Relation as a subquery in Rails 4?
下面的示例在Rails 3中可用,但在Rails 4中失敗。
原因是通過訪問Relation
返回的Relation
現在使用實際的數據庫參數,而不是插值“擁有” ID。
class Blog < ActiveRecord::Base
has_many :posts, :dependent => :destroy
end
class Post < ActiveRecord::Base
belongs_to :blog
end
b = Blog.first # provided something exists of course
query = Post.where(id: b.posts.where("'complicated query' = ''")); 1 # just to avoid printing in console
puts query.to_sql
# SELECT "posts".* FROM "posts" WHERE "posts"."id" IN (SELECT "posts"."id" FROM "posts" WHERE "posts"."blog_id" = $1 AND ('complicated query' = ''))
query.to_a
# raises the error:
# PG::UndefinedParameter: ERROR: there is no parameter $1
# LINE 1: ...M "posts" WHERE "posts"."blog_id" = $1 AND
# ^
請注意,子查詢中的$1
參數顯然不是主查詢提供的(因此是錯誤)。
所以問題是,現在我們如何才能在Rails 4中做同樣的事情(最好是進行最小的更改)?
回答我自己的問題。
實際上,這並不是Rails 4的重大變化。它仍然可以按預期工作。
這是打破它的squeel
gem https://github.com/ernie/squeel/issues/272
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.