簡體   English   中英

如何在Rails 4中將Relation作為子查詢傳遞?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM