2
我有:如何驗證範圍的唯一性?
class Foo
include Mongoid::Document
field :year, :type => Integer, :default => Time.now.utc.year
field :month, :type => Integer, :default => Time.now.utc.month
field :day, :type => Integer, :default => Time.now.utc.day
validates :day, :uniqueness => { :scope => [:month,:year] }
end
我做了以下兩次:
Foo.create(:day => 24, :year => 2013, :month => 5)
我沒有得到任何驗證錯誤。相反,我有兩個相同的記錄。我究竟做錯了什麼?
如何快速是兩個會創建執行,如果他們被解僱立刻這裏有個繼承的競爭條件。也許最初的寫入在第二次創建驗證之前被緩存。我的建議是直接在mongodb中設置一個多鍵唯一約束。 'db.foos.ensureIndex({「day」:1,「year」:1,「month」:1},{unique:true})' –
不立即。我可以等待30秒甚至幾分鐘,我仍然會得到重複記錄。任何地方都沒有競賽狀作爲最後的手段,我可以直接在Mongodb中考慮獨特的約束。不過,我希望通過Mongoid(應用層)來做到這一點。 –
在生產中,如果碰到多個併發插入,可能會遇到上述競爭條件。至於手頭的問題,我沒有在語法上或邏輯上看到任何錯誤。可能的問題:'當使用#valid時,Mongoid的行爲與Active Record略有不同?在已經存在的數據上。活動記錄的#有效?將運行所有驗證,而Mongoid的#有效?將只對內存中的文檔進行驗證作爲優化。「http://mongoid.org/en/mongoid/docs/validation.html –