簡體   English   中英

Rails的ActiveRecord何時會生成帶有空括號的IN子句? “ IN()”?

[英]When would Rails' ActiveRecord generate IN clause with empty parentheses? “IN ()”?

假設我這樣調用ActiveRecord模型Foo:

Foo.sum(:bar, :conditions => { :baz_id => some_value })

何時會導致無效的SQL查詢,並且IN子句中的列表為空,如下所示:

SELECT sum(`foos`.bar) AS sum_bar FROM `foos` WHERE (`foos`.baz_id IN ())

我正在使用activerecord 2.3.12。

我現在無法檢查,因為我的計算機上沒有運行Rails 2.3的應用程序,但是空數組又如何呢? 我認為AR檢查您提供的內容是否是集合(數組),如果是,則生成“ IN(...)”部分,然后為帶有適當轉義的“ IN”子句生成條目。

編輯

空數組會生成(NULL) ,因此它是有效的。 具有空數組的數組會生成序列化的YAML,因此不是這種情況。

我簽入了源代碼,並且有可能生成空的“ IN()”部分,您只需要:

  1. 提供以下參數之一: ArrayActiveRecord::Associations::AssociationCollectionActiveRecord::NamedScope::Scope第2031行

  2. 它應該#respond_to?(:map) ,但不應該#acts_like?(:string)第2424行

  3. 它的#empty? 應該出於某種原因返回false,或者不應該respond_to?(:empty?) 第2425行

  4. 它必須響應#map ,但應返回空數組, 第2428行

然后,它生成您所擁有的。

我不知道如何在真實代碼中發生。 也許還有其他方法可以在現實生活的代碼中創建此案例...

是它生成的SQL( IN ())嗎? 在我的測試(AR 2.3.8)中,它發出了IN (NULL) ,這很好用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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