设计登录后提交表格

时间:2013-12-20 21:54:42

标签: ruby-on-rails devise

我试图让用户在未登录的情况下提交预订请求。提交未经通知的用户后,系统会提示用户登录或注册。注册后,我希望提交的表单和(新注册的)用户将被带到结帐页面。

商店位置保留最后一页在登录后返回用户。我需要弄清楚如何通过提交表单并在注册/登录后将其放在结帐页面上来继续用户的预期路径。

  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("/users/") && !request.xhr?) # don't store ajax calls
      session[:previous_url] = request.fullpath
    end
  end

1 个答案:

答案 0 :(得分:0)

好吧,我认为这很脏,但我还没有找到另一种方法来做到这一点。

after_sign_in_path_for是一种Devise调用方法,允许您在登录后将人员发送到不同的页面。

我将所有创建逻辑从控制器中取出并将其放入服务对象中。

  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方法中,我检查会话参数并在那里创建预订。

让我知道是否有更好的方法来做到这一点!

相关问题