Rails自动加载示例

时间:2015-11-09 02:51:19

标签: ruby-on-rails ruby autoload

我是Ruby on Rails的新手,我对Rails自动加载机制感到不满。

我在/app/helpers/posts_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

根据http://guides.rubyonrails.org/autoloading_and_reloading_constants.htmlUtils::Markdown将从/app/utils/markdown.rb加载,但我收到了:

ActionView::Template::Error:
       uninitialized constant PostsHelper::Utils

我知道问题在于从辅助模块引用Utils,但我没有想法如何正确地进行该引用。

拜托,在我崩溃之前帮帮我吧! = - )

3 个答案:

答案 0 :(得分:1)

尝试:

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

就是在Utils::Markdown前放一个双冒号。它基本上意味着&#34;查看根命名空间,&#34;而不是&#34;查看我目前在&#34;。

中的命名空间

答案 1 :(得分:0)

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

答案 2 :(得分:0)

好的,我有点想通了。

app / some_name路径在模块/类查找中被“咀嚼”,因此Rails不希望在app / some_name / some_class.rb SomeName::SomeClass中找到它,它只是希望找到SomeClass

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