2011-03-10 122 views
91

我見過文檔/網站顯示自定義驗證器應該放在項目的/lib/lib/validators目錄中。我發現(通過閱讀另一篇文章的答案),他們似乎只在config/initializers工作。有沒有人知道,或有一個指向官方文檔的指針,顯示自定義驗證器應該在哪裏生存?應該在哪裏存儲Rails 3自定義驗證器?

+0

[改變接受答案標誌] [http://stackoverflow.com/questions/5263239/where-should-rails-3-custom-validators-be-stored/6610270#comment16660135_6610270)? – JJD 2013-10-17 08:07:24

回答

216

如果您將您的自定義驗證器置於app/validators,它們將自動加載而無需更改您的config/application.rb文件。

+0

我不知道是否需要爲此添加一些gem/config,但是在rails 3.2.8下這不起作用。具體來說,只需將驗證程序放入應用程序/驗證程序/ ???。rb中即可。 – Doug 2012-08-28 06:22:52

+17

Doug嘗試命名驗證器文件的方式與驗證器類的命名方式相同,但強調如下:MyCoolValidator轉到app/validators/my_cool_validator.rb – equivalent8 2012-09-11 08:50:34

+7

這應該是我認爲的接受答案。 – DavidJ 2012-09-13 01:23:17

4

以下是關於自定義驗證的official docs。 AFAIK有一個好的做法,讓他們保持在相關的模型中。

+4

除非它們適用於多個模型,否則您應該將它們放在其他地方以保持乾燥。 – 2011-03-10 17:18:43

+0

這是他們推測是因爲否則有點爲他們創建一個單獨的類。 – 2011-03-10 17:29:41

+7

@Jakub是的存在:單一職責原則 – mattwynne 2011-05-23 10:52:41

6

lib/validators似乎到目前爲止最乾淨。但是,您可能需要在模型之前加載它們,所以可能需要從初始化程序中加載它們。

14

如果您添加到您的/config/application.rb文件:

config.autoload_paths += %W["#{config.root}/lib/validators/"] 

那麼Rails會自動加載你的校驗器在啓動時(就像/配置/初始化/),但你保持清潔在一個很好的,有名的地方有你的驗證器的結構。

+9

好主意,但你的代碼需要一些清理: 'config.autoload_paths + =%W(#{config.root}/lib/validators /)' – aNoble 2011-05-26 20:46:41