2013-12-20 3 views
3

Я пытаюсь разрешить пользователям отправлять запрос на резервирование без входа в систему. После отправки неподдерживаемых пользователей предлагается выполнить вход или зарегистрироваться. После регистрации я хотел бы, чтобы форма была отправлена ​​и (новые зарегистрированные) пользователи были отправлены на страницу проверки.Отправить форму после создания логина

расположение магазина сохраняет последнюю страницу, чтобы вернуть пользователям после входа в систему. Мне нужно, чтобы выяснить, как продолжить пользователей по запланированному пути, подав их формы и размещения их на странице оформления заказа после регистрации/войти.

def store_location 
    #stores the last url. Used for post-login redirects to what the user was trying to do  last. 
    if (!request.fullpath.match("https://stackoverflow.com/users/") && !request.xhr?) # don't store ajax calls 
     session[:previous_url] = request.fullpath 
    end 
    end 

ответ

0

Хорошо, я думаю, что это довольно грязно, но я не смог найти другой способ сделать это.

after_sign_in_path_for является метод Придумайте вызовы, который позволяет посылать человек на разные страницы после знака.

Я взял всю логику создания из контроллера и поместить его в объект службы.

def after_sign_in_path_for(resource) 
    if session[:booking_params].present? 
     @booking = Booking::CreateBooking.new(user:current_user, params:  session[:booking_params]).return_booking 
     checkout_booking_path(@booking.public_id) 

    else 
     session[:previous_url] || root_path 
    end 
    end 

В контроллере метод создания разбит на две части. Если нет текущего пользователя, я сохраняю их параметры в сеансе, и они отправляются для входа в систему. Если объект службы CreateBooking называется нормально.

def create 
    if current_user.nil? 
     session[:booking_params] = params 
     redirect_to new_user_registration_path 
    else 
     @booking = Booking::CreateBooking.new(user:current_user, params:params).return_booking 
     respond_to do |format| 
     format.html { redirect_to checkout_booking_path(@booking.public_id) } 
     end 
    end 
    end 

В after_sign_in_path_for методе я проверяю для сеанса и Params создать бронирование там.

Дайте мне знать, если есть лучший способ сделать это!

+0

Ваш подход является правильным, но я получил эту ошибку: 'NameError в Devise :: SessionsController # создать неинициализированный постоянного Бронирование :: CreateBooking' –

Смежные вопросы