【问题标题】:Access Sinatra settings from helper module从帮助模块访问 Sinatra 设置
【发布时间】:2014-08-14 09:55:14
【问题描述】:

我有一个类App 继承自Sinatra::Base 和一个模块AppHelper,我在App 中与helpers AppHelper 一起使用。如何从AppHelper 访问App 中定义的设置?

下面是一些示例代码:

# app.rb
require "sinatra"
require "./helper"

class App < Sinatra::Base

  set :message, "Hello, World!"
  helpers AppHelper

  get "/" do
    helper_method
  end
end

if __FILE__ == $0
  App.run! port: 4567
end

这是助手:

# helper.rb
module AppHelper

  def helper_method
    settings.message
  end
end

不幸的是,这会产生

NoMethodError at /
undefined method `message' for App:Class

如何从我的帮助模块访问设置?

【问题讨论】:

  • 您的代码对我来说没问题,我认为sethelpers 调用的顺序不是问题所在。此外,您应该要求 sinatra/base 而不是普通的 sinatra
  • 我想我的例子很垃圾......我应该清理我的真实代码并发布它而不是一些虚构的示例代码。我不想删除这个问题,因为我已经接受了答案。
  • 还将 require 'sinatra/base' 添加到帮助模块。 sitepoint.com/using-sinatra-helpers-to-clean-up-your-code

标签: ruby sinatra


【解决方案1】:

尝试切换依赖的顺序:

helpers AppHelper
set :message, "Hello, World!"

【讨论】:

  • 谢谢!这行得通。我会尽快接受你的回答。但它不适用于我的真实应用程序,因为我的真实代码与我的示例略有不同。我在 config.ru 中配置我的所有设置。我将为此创建一个单独的答案。
【解决方案2】:

我的真实代码与我的示例有点不同(我认为这无关紧要)。我在 config.ru 中定义了我的设置,因此 dax 的答案不适用于我的应用程序。我可以通过使用Sinatra::Application.settings 而不是settings 来解决这个问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-07
    • 1970-01-01
    相关资源
    最近更新 更多