2013-12-20 69 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' –