它是在’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-code-goes-in-the-lib-directory/