【问题标题】:Accessing module in lib directory (Ruby on rails)访问 lib 目录中的模块(Ruby on rails)
【发布时间】:2011-03-07 15:22:26
【问题描述】:

我正在尝试访问位于我的应用程序的 lib 目录中的模块中的函数。 (lib/search.rb)

我实际上是在尝试从以下位置进行邮政编码搜索: http://joshhuckabee.com/simple-zip-code-perimeter-search-rails

lib/search.rb

module Search
  def zip_code_perimeter_search(zip, radius)
   #code
  end
end

我试图从 rails 控制台或我的控制器调用 zip_code_perimeter_search 函数,这两次我都得到未定义的方法。有什么想法吗?

【问题讨论】:

    标签: ruby-on-rails


    【解决方案1】:

    在您的控制台/控制器中:

    include Search
    zip_code_perimeter_search(zip, radius)
    

    如果它没有在 Rails 3 中自动加载,在您的 config/application.rb 文件中,您可以这样做:

    # Custom directories with classes and modules you want to be autoloadable.
    config.autoload_paths += Dir["#{config.root}/lib/**/"]
    

    【讨论】:

    • 谢谢,我还需要对 lib/search 进行要求。我猜 rails 3 不会自动加载 lib。
    • 我已经编辑了答案。如果您在 application.rb 文件中配置加载目录设置,则无需“要求”该文件。
    • 我正在尝试同样的事情,但是当我尝试访问我的模块时,即使按照您上面概述的那样修改了配置,我仍然会收到此错误。它在这条线上崩溃:include Scrape 并抛出此错误uninitialized constant Admin::AdoptionsController::Scrape
    【解决方案2】:

    对于调用模块方法,直接将其包含在类中,然后在类实例上调用。

    Class call_module_method
        include Search
    end
    

    现在

    call_module_method.new.zip_code_perimeter_search(zip, radius)
    

    将评估方法zip_code_perimeter_search(zip, radius)中的代码

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-08-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多