2015-10-07 223 views
6

mongoid 4.0.2Mongoid默認範圍覆蓋默認值。爲什麼?

我有Test類:

class Test 
    include Mongoid::Document 
    include Mongoid::Timestamps 
    include Mongoid::Paranoia 

    field :successful,  type: Boolean, default: false 

    default_scope ->{ where(successful: true) } 
end 

然後我做的:

t=Test.new; t.successful 
=> true 

因此,這裏的問題:是什麼這種行爲背後的原因是什麼?

P.S.我已經修復它在after_initialize方法的幫助下重置successful

+0

這聽起來像一個錯誤。你確認它是'default_scope'導致這個? – Drenmi

+0

@Drenmi當我用default_scope刪除行時,一切正常,所以我猜是的。 –

+0

@ muistooshort當然,現在修好了,我的壞。 –

回答

1

嘗試調用Test.create(),成功也是如此。這看起來很奇怪,但是想想你在default_scope中說的是什麼......得到所有真實的測試。

這看起來像從active_record最初來了一句:但它是嚴格遵循active_record這應該工作rails3 default_scope, and default column value in migration,但它不:

t= Test.unscoped.new; t.successful 
=> true 

在蒙戈的世界裏,如果你把一個default_scope它將範圍內的所有對象,並假設你會想要新的東西也有相同的默認值。解決方法是使用回調。你提到連接after_initialize這是一個不錯的選擇,但是你需要確保你檢查它是否已經被設置。另一種方法是使用命名範圍而不是默認範圍。