未定义的方法“命名空间”

undefined method `namespace'

我正在尝试为 Sinatra 应用实现命名空间(使用 sinatra-contrib gem)路由,但在我尝试启动服务器后出现错误:

undefined method `namespace' for GuessApp:Class

app.rb

require 'sinatra'
require 'sinatra/namespace'
require 'haml'
require_relative 'routes/init'
require_relative 'models/init'
require_relative 'helpers/init'

class GuessApp < Sinatra::Base
  register Sinatra::Namespace
end

routes/init.rb

require_relative "books"
require_relative "stars"

routes/books.rb

class GuessApp < Sinatra::Base
  namespace '/books' do
    @title = "Books"

    get '' do
      @books = Book.all
      haml :books, layout: :layout
    end
  end
end

没有命名空间,这条路由工作正常。

require 'sinatra/namespace' 在你需要 books.rb 之前,但你只 register Sinatra::NamespaceGuessApp 应用程序 之后 你需要它.单独要求仅使其在经典风格的应用程序中可用。

在尝试使用 namespace 之前,您需要确保 Sinatra::Namespace 已在 GuessApp 中注册,例如 app.rb:

require 'sinatra'
require 'sinatra/namespace'
require 'haml'    

class GuessApp < Sinatra::Base
  register Sinatra::Namespace
end    

require_relative 'routes/init'
require_relative 'models/init'
require_relative 'helpers/init'