我正在使用Ruby on Rails 3.2.9。解决与Trouble on extending Rails in a sub-directory of the 'lib' directory相关的“Custom Validators”的方法是声明以下代码(请注意文件所在的目录)
# lib/extension/rails/custom_validator.rb
class CustomValidator < ActiveModel::EachValidator
# ...
end
和将config.autoload_paths += %W(#{config.root}/lib/extension/rails)
语句放在config/application.rb
文件中。这样在启动服务器时正确加载CustomValidator
,我的lib/
目录按照我的预期进行组织。
但是,我想知道这是否是在RoR中制作这些东西的“正确”/“正确”方式。换句话说,有没有更好的方法来实现同样的目标?
注意:为了组织文件中的代码,我正在考虑命名空间类,如下所示:
# lib/extension/rails/custom_validator.rb
module Extension
module Rails
class CustomValidator < ActiveModel::EachValidator
# ...
end
end
end
但是,通过使用上面的代码,似乎没有一种简单的方法可以使CustomValidator
工作,即使我在config.autoload_paths += %W(#{config.root}/lib)
文件中声明了config/application.rb
。
答案 0 :(得分:0)
在许多情况下,自定义验证程序属于应用程序域。所以最好的地方是app/validators
。这里有一篇很棒的帖子http://blog.codeclimate.com/blog/2012/02/07/what-code-goes-in-the-lib-directory/
答案 1 :(得分:0)
您可以在lib/
目录下创建需要rails扩展名的文件:
# lib/extension.rb
require 'extension/rails/custom_validator'