4

我正在使用 Ruby on Rails 3.2.9。解决与自定义验证器相关的“在 'lib' 目录的子目录中扩展 Rails 时遇到问题”的方法是声明以下代码(注意文件所在的目录)

# 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文件中声明,似乎也没有一种简单的方法可以使其工作。

4

2 回答 2

0

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

于 2012-12-16T22:34:12.517 回答
0

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

# lib/extension.rb
require 'extension/rails/custom_validator'
于 2014-01-02T17:53:48.440 回答