Vitalii
Vitalii

Reputation: 1812

undefined method `namespace'

I'm trying implement a namespace(with sinatra-contrib gem) routing for Sinatra app and have an error after I'm trying to start the server:

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

Without namespace this route works fine.

Upvotes: 0

Views: 1622

Answers (1)

matt
matt

Reputation: 79723

You require 'sinatra/namespace' before you require books.rb, but you only register Sinatra::Namespace in the GuessApp app after you require it. Requiring alone only makes it available in classic style apps.

You need to make sure Sinatra::Namespace is registered in GuessApp before you try to use namespace, something like this in 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'

Upvotes: 2

Related Questions