【问题标题】:Sinatra: put some of my helpers in separate folderSinatra:将我的一些助手放在单独的文件夹中
【发布时间】:2014-02-05 10:38:36
【问题描述】:

我有一个 Sinatra 应用程序,我有一些助手,他们有他们的文件夹(助手),我在其中有 website_helpers.rb 等等。我想将这些助手中的一些移动到助手文件夹中自己的文件夹中:拥有助手/子助手,因为我想放在子助手文件夹中的文件与其他文件不同,为他们设置不同的文件夹是有意义的.

我尝试将此添加到我的config.ru

Dir.glob('./helpers/subhelpers/*.rb').each { |file| require file }

然后在我的控制器中:

helpers MyHelperFromSubHelpers

但我收到一个错误uninitialized constant (NameError)

有什么想法可以解决这个问题,以获得清晰的结构吗?

【问题讨论】:

    标签: ruby sinatra


    【解决方案1】:

    TBH,听起来你做的有点过头了,如果你想使用更多的 Java,比如 every-namespace-must-be-a-directory 布局,总会有 Rails。除此之外,通常将单独文件中的帮助程序放置在 Sinatra 命名空间中 - 请参阅 http://www.sinatrarb.com/extensions.html#extending-the-request-context-with-sinatrahelpers

    就我个人而言,我把它们放进去:

    project-root/
      lib/
        sinatra/
          name-of-extension.rb
    

    主要是因为如果扩展真的有用,我最终会想在另一个项目中使用它,这是 Sinatra gem 的标准布局,可以轻松将其提取到一个中,几乎没有任何更改在调用代码中。

    Dir.glob will only return the file name and not the full path with each match,所以需要添加路径:

    Dir.glob('./helpers/subhelpers/*.rb').each do |file|
      require File.expand_path File.join( File.dirname(__FILE__), "./helpers/subhelpers/", file)
    end
    

    可能会修复它。

    【讨论】:

    • 非常感谢!也许我会让它不带子文件夹,你说得对,这对于 Sinatra 应用程序来说有点太多了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-08-25
    • 2012-08-25
    • 1970-01-01
    • 2021-09-12
    • 1970-01-01
    • 2016-10-27
    • 1970-01-01
    相关资源
    最近更新 更多