2011-11-09 26 views

回答

1

我現在無法檢查,因爲我沒有在我的機器上運行Rails 2.3的應用程序,但如何處理空數組?我認爲AR檢查你提供的是集合(數組),如果是,那麼它會生成「IN(...)」部分,然後通過適當的轉義爲「IN」子句生成條目。

EDIT

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

source code檢查,並有可能產生空 「IN()」 的一部分,你只需要:

  1. 提供一個參數,它是這一個:ArrayActiveRecord::Associations::AssociationCollectionActiveRecord::NamedScope::Scopeline 2031

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

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

  4. 它具有響應#map,但應該返回空數組,line 2428

然後它產生你有什麼。

我不知道它是如何發生在真實的代碼。也許還有其他方法來創建這種情況下的現實生活中的代碼...

+0

狂猜...一個*嵌套*空陣列? –

0

是它生成的SQL(IN())?在我的測試(AR 2.3.8)中,它發出IN (NULL),它工作得很好

+0

那麼,在我的情況下,它發出「IN()」這是不好的問題是什麼'some_value'發生時;) –

+0

好吧,我看到,但是當這種情況發生時你不能調試這個點,並且看到'some_value'的值嗎?這是奇怪的,最邏輯的值是做一個空的數組,但這一直對我來說...... – tokland

+0

那麼,空數組是好的,以及'nil'。我會自己調試,但這個錯誤非常罕見,我希望有人可以更快地給出答案。 –