2013-12-20 100 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 

在控制器中,create方法分爲兩部分。如果沒有當前用戶,我將它們的參數保存到會話中併發送到登錄。如果有正常調用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方法中,我檢查會話參數並在那裏創建預訂。

讓我知道是否有更好的方法來做到這一點!

+0

你的做法是正確的,但我得到這個錯誤: 'NameError在設計:: SessionsController#創建 未初始化的常量的預訂:: CreateBooking' –