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

时间:2012-12-16 22:19:47

标签: ruby-on-rails ruby ruby-on-rails-3

我正在使用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

2 个答案:

答案 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'