Reputation: 1812
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
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