嗨,我正在尝试以Sinatra
风格编写rails
?
#in app.rb
get '/' do
# params request and response are accessible here
SomeController.new.some_method
end
我无法访问控制器中的params
request
response
class SomeController < Sinatra::Base
def some_method
#params are nil here
end
end
我可以通过从app.rb
作为参数来实现它,但我希望它的行为像rails。
我要做的是使一个基本控制器接受参数/请求/响应作为初始化参数:
require 'sinatra'
require 'byebug'
class BaseController
attr_reader :params, :request, :response
def initialize(sinatra_app)
@params = sinatra_app.params
@request = sinatra_app.request
@response = sinatra_app.response
end
end
class SomeController < BaseController
def some_method
{
params: params.class.name,
request: request.class.name,
response: response.class.name,
}.to_json
end
end
get '/' do
SomeController.new(self).some_method
end
然后测试:
$ curl localhost:4567
响应为:
{
"params":"Sinatra::IndifferentHash",
"request":"Sinatra::Request",
"response":"Sinatra::Response"
}
显示在当前上下文中所有3个变量都可用