Rails 3自定义验证器应存储在哪里?


93

我已经看到docs / websites显示自定义验证器应该放在项目的/lib/lib/validators目录中。我发现(通过阅读另一篇文章的答案)他们似乎只在工作config/initializers。是否有人知道或有一个指向官方文档的指针,该文档显示了自定义验证器应存放的位置?


Answers:


220

如果将自定义验证器放入其中,app/validators它们将自动加载而无需更改config/application.rb文件。


我不知道是否需要为此添加一些gem / config,但是在Rails 3.2.8下这是行不通的。具体来说,仅将您的验证程序放入app / validators / ???。rb中是行不通的。
道格2012年

17
道格(Doug)尝试使用命名验证器类的方式命名验证器文件,但要强调:MyCoolValidator转到app / validators / my_cool_validator.rb
等效

14
@Doug,您需要重新启动服务器。自动加载路径会在初始化时扩展,因此只有在执行此操作后,新的子文件夹才会被拾取。
2012年

我也想对ActiveModel :: Validations :: HelperMethods进行猴子补丁,以为我的新验证添加帮助程序(例如,AddressValidator的validates_address)。当我在app / validators / address_validator.rb中同时包含Monkeypatch和Validator时,仅加载AddressValidator对象,而不加载Monkeypatch。你们也有同样的行为吗?
jshkol

1
spring stop在Rails 5.2中对我来说是必需的,否则不会被接受。
杰克·金塞拉

15

如果将此添加到/config/application.rb文件中:

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

然后,Rails将在启动时自动加载您的验证器(就像/ config / initializers /一样),但是您要保持干净的结构,即将验证器放在一个不错的,有名的位置。


9
好主意,但是您的代码需要一些清理: config.autoload_paths += %W(#{config.root}/lib/validators/)
aNoble

6

lib/validators似乎是迄今为止最干净的。但是,您可能需要在初始化模型之前将它们加载到模型中。


4

这是有关自定义验证的官方文档。AFAIK将其保留在相关模型中是一个好习惯。


5
除非它们适用于多种型号,否则应将它们保留在其他位置以保持干燥。
Andrew Marshall

它们大概就是这些东西,因为否则为它们创建单独的类没有什么意义。
2011年

7
@Jakub是的:单一责任原则
mattwynne 2011年

2
官方文档的链接已损坏。这是该文档的当前位置;guides.rubyonrails.org/...
Stijnster
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.