2011-03-10 123 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