2013-02-11 3 views
1

Существует код в приложении Синатраприобретайте PARAMS в пределах запроса поста с использованием Params хэша

post '/login' do 
    return_url = params[:return_url] # it's nil 
    #........ 
end 

URL-адрес страницы может содержать return_url параметр - /my_app/login?return_url='blabla'. Когда я пытаюсь его получить, он возвращает nil, потому что в данных сообщения нет параметра return_url.

Как я могу получить params из return_url? Я знаю, что могу создать скрытое поле и сохранить его в нем, но есть ли другой способ?

ответ

2

Строка запроса преобразуется в параметры для запроса GET. Поскольку вы имеете в виду запрос POST, я предполагаю, что у вас уже есть форма на странице, которая будет переводиться в параметры вашего действия в синатра. В этом случае строка запроса игнорируется.

Вы можете добавить скрытое поле в форму, как вы предлагаете. Вы также можете сохранить return_url в сеансе пользователя, когда они загружают форму до входа в систему. Это может быть примерно так:

enable :sessions 

get '/login_form' do 
    session[:return_url] = 'blahblah' 
end 

post '/login' do 
    return_url = session.delete(:return_url) 
    # login 
end