它是在’lib /’目录中实现自定义validation器的正确方法吗?

我正在使用Ruby on Rails 3.2.9。 解决与自定义validation器相关的“ 在’lib’目录的子目录中扩展Rails的麻烦 ”的方法是声明以下代码(注意文件所在的目录)

# lib/extension/rails/custom_validator.rb class CustomValidator < ActiveModel::EachValidator # ... end 

config/application.rb文件中放入config.autoload_paths += %W(#{config.root}/lib/extension/rails)语句。 这样启动服务器时正确加载了CustomValidator ,我的lib/目录按照我的预期进行组织。

但是,我想知道这是否是在RoR中制作这些东西的“正确”/“正确”方式。 换句话说,有没有更好的方法来实现同样的目标?


注意 :为了组织文件中的代码,我正在考虑命名空间类,如下所示:

 # lib/extension/rails/custom_validator.rb module Extension module Rails class CustomValidator < ActiveModel::EachValidator # ... end end end 

但是,通过使用上面的代码,似乎没有一种简单的方法可以使CustomValidator工作,即使我在config/application.rb声明config.autoload_paths += %W(#{config.root}/lib) config/application.rb文件。

您可以在需要rails扩展的lib/目录下创建一个文件:

 # lib/extension.rb require 'extension/rails/custom_validator' 

在许多情况下,自定义validation器属于应用程序域。 所以最好的地方是app/validators 。 这里有一篇很棒的posthttp://blog.codeclimate.com/blog/2012/02/07/what-c​​ode-goes-in-the-lib-directory/