2012-12-15 38 views
0

我正在使用Ruby on Rails 3.2.9,我想用位于lib/目录的子目录中的custom validator扩展框架。我执行以下操作:在'lib'目录的子目录中扩展Rails时遇到问题

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

重新启动服务器后出现Unknown validator: 'CustomValidator'错误。我该如何解决这个问题?


注我:在config/application.rb文件我说config.autoload_paths += %W(#{config.root}/lib)

注二:如果我把custom_validator.rb文件“直属”的lib/目录(即无“子directoring”文件),我使用下面的代码,然后它工作。

# lib/custom_validator.rb 
class CustomValidator < ActiveModel::EachValidator 
    # ... 
end 
+0

在哪里/你如何使用这个验证器(即什么是对异常回溯的样子)? –

+0

可能的重复:http://stackoverflow.com/questions/4981267/subfolders-in-lib – mccannf

+0

我打开了一个[相关的问题](http://stackoverflow.com/questions/13906040)。 – Backo

回答

0

尝试在名为“extension.rb”具有以下内容

$:.unshift File.expand_path(File.dirname(__FILE__)) 

module Extension 
    module Rails 
     autoload :CustomValidator, "extension/rails/custom_validator" 
    end 
end 

结账http://www.rubyinside.com/ruby-techniques-revealed-autoload-1652.htmlhttps://github.com/macournoyer/thin/blob/c8f4627bf046680abb85665f28ab926e36c931db/lib/thin.rb这种技术是如何使用的lib文件夹中的文件。

上面的代码假设你写你的验证像下面

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

而且你在你的模型像下面

class MyModel 
    validates_with Extension::Rails::CustomValidator 
end 

另一种选择是定义已经包括了它验证程序如下

# lib/extension/rails/custom_validator.rb 

class CustomValidator < ActiveModel::EachValidator 
    # ... 
end 

然后将其目录添加到你的应用程序的负载路径

# config/application.rb 
config.autoload_paths += %W(#{config.root}/lib/extension/rails) 

而且在模型中使用下列验证

class MyModel 
    validates :my_property, :presence => true, :custom => true 
end 
+0

我试过你的方法,但它不起作用。 – Backo

+0

您可能需要将以下内容添加到文件的开头。请参阅编辑。 $ :. unshift File.expand_path(File.dirname(__ FILE__)) – shadysayed

+0

是什么让'$ :. unshift File.expand_path(File.dirname(__ FILE __))'代码?它的目的是什么?但是,即使添加了该代码,我仍然得到'未知验证器:'CustomValidator'错误。看起来'extension.rb'文件从不加载... – Backo