Как получить URL запроса в контексте класса ruby ​​Sinatra? - PullRequest
0 голосов
/ 20 ноября 2018

В Sinatra у вас есть возможность получить полный путь для запроса, используя следующие строки:

get '/hello-world' do
  request.path_info   # => '/hello-world'
  request.fullpath    # => '/hello-world?foo=bar'
  request.url         # => 'http://example.com/hello-world?foo=bar'
end

У меня есть несколько классов, которые я использую в своем приложении.В этом конкретном классе мне нравится сравнивать request.path_info со строкой.

class foo
  def build_menu
    if request.path_info == "/hello-world"
      highlight_menu_entry
    end
  end
end

Но request -объект не известен в этом контексте класса и выдается ошибка.Я думаю, что это СУПЕР-ГЛОБАЛЬНЫЙ, как в PHP $_POST или $_GET, если есть некоторые в Ruby / Sinatra.

Так, как я могу проверить request.path в контексте класса?

Ответы [ 2 ]

0 голосов
/ 21 ноября 2018

Нашел ответ сам.Я использую собственную глобальную переменную $PATHNAME, которую я могу использовать в любом контексте.В сочетании с before do -процессором в моем главном приложении я могу использовать переменную.

before do
  $PATHNAME=request.path_info
end

class Foo
  def build_menu
    highlight_menu_entry if $PATHNAME == '/hello-world'
  end
end
0 голосов
/ 20 ноября 2018

Вы можете передать значение вашему классу:

class Foo
  attr_accessor :request_path_info, :request_fullpath, :request_url
  def build_menu
    highlight_menu_entry if request_path_info == '/hello-world'
  end
end

foo = Foo.new

get '/hello-world' do
  foo.request_path_info = request.path_info
  foo.request_fullpath = request.fullpath
  foo.request_url = request.url
end

foo.build_menu
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...