ruby - 如何在包含的模块中使用我的 Sinatra 助手?

标签 ruby sinatra

我在外部文件中定义了路由和助手,并由 Sinatra 包含,但是我是 Ruby 新手,现在不知道如何在路由中使用助手方法。当我在 RubyMine 中运行代码并访问配置文件 URL 时,出现错误“NoMethodError - 未定义的方法‘ protected !’”

## Main class
require 'sinatra/base'
class MyApp < Sinatra::Base
    register Sinatra::MyHelpers
    register ProfileRoutes
    ...
end


## Helpers include
require 'sinatra/base'
module Sinatra
  module LocutusHelpers
    def self.registered( app )

      app.before do
        ...
      end

      def protected!
        ...
      end

    end
  end
end


## Routes include
require 'sinatra/base'
module ProfileRoutes
  def self.registered( app )

    app.get '/profile/:userid' do
      protected!
      ...
    end

  end
end

我已尝试使用 def self.protected! 作为帮助程序,但它无法访问请求对象。 我还尝试过 Sinatra::MyHelpers.protected!Sinatra.protected!app.protected!,所有这些都会引发错误这些也是

你知道我如何从我的路线访问助手吗?还是我设置不正确?

最佳答案

看来你混淆了adding helpers from extensions并通过扩展配置您的应用程序。

您需要将 protected! 移动到模块中,然后在注册扩展程序时将该模块添加为帮助程序模块。

module LocutusHelpers
  # new module, move protected! into here
  module HelperMethods
    def protected!
      ...
    end
  end

  def self.registered( app )

    # add new hlpers module
    app.helpers HelperMethods

    # other extension setup as before...
    app.before do
      ...
    end

  end
end

关于ruby - 如何在包含的模块中使用我的 Sinatra 助手?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22357563/

相关文章:

sinatra - 如何从Sinatra发送二进制数据?

Ruby:分离多个返回值

ruby - Rack 获取基于 session 的 cookie 时出错

ruby - Rack::Auth 是否与基本 HTTP 身份验证相同?

ruby - 在我的 Mac 上找不到特定的 gem

ruby - 在应用程序之间共享过滤器

ruby - 如何使用 sinatra session

ruby - 使用 Ruby 获取网页的所有链接

ruby-on-rails - 如何获取特定模型的所有名称

ruby-on-rails - 在 Rails View 中查找模式并替换为链接的正确方法