我有一个Sinatra应用程序设置,其中大部分逻辑在各种类中执行,post
/ get
路由实例化这些类并调用它们的方法。
我正在考虑将post
/ get
路由处理程序放在类本身中是否会是一个更好的结构。
无论如何,我想知道是否有可能。例如:
class Example
def say_hello
"Hello"
end
get '/hello' do
@message = say_hello
end
end
如果不修改上述内容,Sinatra会说say_hello
对象上没有方法SinatraApplication
。
答案 0 :(得分:21)
您只需要继承Sinatra::Base
:
require "sinatra/base"
class Example < Sinatra::Base
def say_hello
"Hello"
end
get "/hello" do
say_hello
end
end
您可以使用Example.run!
运行您的应用。
如果您需要在应用程序的各个部分之间进行更多分离,请创建另一个Sinatra应用程序。将共享功能放在模型类和帮助程序中,并与Rack一起运行所有应用程序。
module HelloHelpers
def say_hello
"Hello"
end
end
class Hello < Sinatra::Base
helpers HelloHelpers
get "/?" do
@message = say_hello
haml :index
end
end
class HelloAdmin < Sinatra::Base
helpers HelloHelpers
get "/?" do
@message = say_hello
haml :"admin/index"
end
end
<强> config.ru:强>
map "/" do
run Hello
end
map "/admin" do
run HelloAdmin
end
安装Thin,然后使用thin start
运行您的应用。
答案 1 :(得分:0)
您可能想要使用Sinatra Helpers。