我是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.html,Utils::Markdown
将从/app/utils/markdown.rb
加载,但我收到了:
ActionView::Template::Error:
uninitialized constant PostsHelper::Utils
我知道问题在于从辅助模块引用Utils,但我没有想法如何正确地进行该引用。
拜托,在我崩溃之前帮帮我吧! = - )
答案 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
- - )