Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails Rails自动加载示例_Ruby On Rails_Ruby_Autoload - Fatal编程技术网

Ruby on rails Rails自动加载示例

Ruby on rails Rails自动加载示例,ruby-on-rails,ruby,autoload,Ruby On Rails,Ruby,Autoload,我是RubyonRails的新手,在Rails的自动加载机制上我的头都碎了 我的/app/helpers/posts\u helper.rb中有这样的代码: module PostsHelper def markdown_render(data) Utils::Markdown.render data end end 我有/app/utils/markdown.rb和类似的东西: module Utils class Markdown class <<

我是RubyonRails的新手,在Rails的自动加载机制上我的头都碎了

我的
/app/helpers/posts\u helper.rb中有这样的代码:

module PostsHelper  
  def markdown_render(data)
    Utils::Markdown.render data
  end
end
我有
/app/utils/markdown.rb
和类似的东西:

module Utils
  class Markdown
    class << self
      def render(data)
        # render some dataz
      end
    end
  end
end

我知道问题在于从helper模块引用util,但我不知道如何正确地进行引用

求求你,在我的头撞坏之前帮帮我!=-)

试试看:

module PostsHelper  
  def markdown_render(data)
    ::Utils::Markdown.render data
  end
end

也就是说,在
Utils::Markdown
前面放一个双冒号。它基本上是指“在根名称空间中查找”,而不是“在我当前所在的名称空间中查找”。

markdown.rb
中,只需将
markdown
定义为顶级类(即,不在任何名称空间中)。

好的,我大概明白了

app/some\u name路径是从模块/类查找中“咀嚼”出来的,因此Rails不希望在app/some\u name/some\u class.rb
SomeName::SomeClass
,它只希望找到
SomeClass


我重新构造了文件ierarchy,现在它是:app/modules/utils/my_markdown.rb,并且它正确地从my_markdown.rb自动加载
utils::MyMarkdown

Nope<代码>::Utils::Markdown.render data
=>
ActionView::Template::Error:未初始化的常量Utils
“我知道问题在于从帮助器模块引用Utils”-结果证明这不是问题所在。我刚刚检查过,如果您将这两个文件中的所有代码都放在/app/helpers/posts\u helper.rb中,它就可以工作了。所以,问题是Rails没有正确地自动加载它。不知道为什么,抱歉!您可以从这个问题中删除和标记,它实际上与这两者都没有关系。您的问题只是简单的ruby常量查找。(当然,在没有自动加载的情况下,您必须使用
require
)根据,Ruby constant lookup和Rails autoloading是完全不同的,因此我更希望它们保持不变Rails应自动自动加载:“应用程序和引擎中应用程序的所有子目录。例如,应用程序/控制器。它们不需要是默认目录,任何自定义目录(如应用程序/工作者)都自动属于自动加载路径。”(from)@joshua.paling感谢您的评论。更新了我的答案,很有效,谢谢。但我不想用这些实用程序类和方法污染全局名称空间,我想保持它整洁。有没有实现这种用例的方法?
module PostsHelper  
  def markdown_render(data)
    ::Utils::Markdown.render data
  end
end