2011-08-27 29 views
10

我使用permanent_records寶石在我的Rails應用程序3.0.10,防止硬刪除默認的範圍,它似乎軌無視我的默認範圍,檢查的唯一Rails 3名中驗證的唯一忽略的型號

# user.rb 
class User < AR::Base 
    default_scope where(:deleted_at => nil) 

    validates_uniqueness_of :email # done by devise 
end 

在我的Rails控制檯中,試圖通過已刪除的電子郵件找到用戶結果爲空,但在註冊帶有已刪除電子郵件地址的新帳戶時,會在電子郵件字段中導致驗證錯誤。

這也是在我的應用程序

# group.rb 
class Group < AR::Base 
    default_scope where(:deleted_at => nil) 
    validates_uniqueness_of :class_name 
end 

另一種模式的情況下,這是相同的情況下,和以前一樣,刪除一個組,然後試圖通過在無類名結果中找到它,但是當我嘗試創建一個具有已知的刪除類名稱的組,但驗證失敗。

有誰知道如果我做錯了什麼,或者我應該只爲這種行爲編寫自定義驗證器?

回答

10

嘗試將範圍唯一性檢查與deleted_at

validates_uniqueness_of : email, :scope => :deleted_at 

這可以讓兩個記錄具有相同的電子郵件值,只要deleted_at場是兩個不同的。只要在刪除時填入正確的時間戳,我猜永久記錄寶石可以,這應該工作。

+4

好吧,只是不要忘記,「validates_uniqueness_of」在rails 3中已棄用。請改用「validates:email,:uniqueness => {:scope =>:deleted_at}」。 – sandrew

+0

它不會調用同一個驗證器嗎? – Jimmy

+0

我會將此標記爲正確,因爲它會很好,昨天晚上幸運的是我沒有考慮問題,我寫了我自己的作用域獨特性驗證程序 – Jimmy