2013-07-24 73 views
5

在Rails應用程序中,直接從數據庫中推斷出列名,類型和默認值。有沒有什麼辦法可以在初始化時或試圖保存時從數據庫約束中推斷驗證?將數據庫約束轉換爲Rails驗證

這將允許更多的DRYness,並確保所有數據都可以在觸擊數據庫並獲取異常之前輕鬆驗證,因爲驗證將覆蓋所有數據庫約束。數據庫的限制是使用數據無效時的權威信息來源。

或者,是否有可能使ActiveRecord從命中數據庫約束中解救出來,並且就像弱驗證失敗一樣?這意味着數據庫約束可以在不重新啓動或編輯Rails應用程序的情況下從外部操縱,性能將會提高,因爲唯一性驗證不需要單獨的查詢,而且唯一性驗證也不會受到競爭條件的影響。

回答

3

您可以使用強制模式規則寶石:

https://github.com/twinge/enforce_schema_rules

它會驗證你對你已經在你的模式中創建數據庫規則模型。

例子:

class Person < ActiveRecord::Base 
    enforce_schema_rules :except => :dhh 
end 
+0

好答案!沒有嘗試過,但gem在源代碼上看起來非常簡單,有效並且輕便,將schema.rb轉換爲驗證,但不檢查數據庫。對於我的用例來說,這不會起作用,與那些不斷改變架構的人共享數據庫,但將來可能會使用它。 – user1158559