sinatra控制器中无法访问参数

问题描述 投票:2回答:1

嗨,我正在尝试以Sinatra风格编写rails

#in app.rb
 get '/' do 
   # params request and response are accessible here
   SomeController.new.some_method
 end

我无法访问控制器中的paramsrequestresponse

  class SomeController < Sinatra::Base
    def some_method
      #params are nil here
   end
  end

我可以通过从app.rb作为参数来实现它,但我希望它的行为像rails。

ruby-on-rails ruby sinatra
1个回答
0
投票

我要做的是使一个基本控制器接受参数/请求/响应作为初始化参数:

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个变量都可用

© www.soinside.com 2019 - 2024. All rights reserved.