ruby-on-rails - 设备登录后提交表单

标签 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

最佳答案

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

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

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

  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

在 Controller 中,create 方法分为两部分。如果没有当前用户,我将他们的参数保存到 session 中,然后将他们发送到登录。如果存在则正常调用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 方法中,我检查 session 参数并在那里创建预订。

如果有更好的方法,请告诉我!

关于ruby-on-rails - 设备登录后提交表单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20712545/

相关文章:

javascript - 使用 webpacker 加载字体和图像

ruby-on-rails - Ruby 迭代版本号

ruby-on-rails - Ruby on Rails 3 - to_json 不包括所有属性

ruby-on-rails - 尝试销毁对象时设计注销(Rails 3.0.5 和设计 1.1.8)

devise - Rails 4 参数和 "Unpermitted parameters"错误

ruby-on-rails - 如何为字母数字和电子邮件类型自定义 parsleyjs 错误消息?

ruby-on-rails - validates_uniqueness_of在销毁的嵌套模型 rails 中

sql - Rails 查询中的 `<>` 是什么意思?

ruby-on-rails - Rails - 参数数量错误(:force => true?)

ruby-on-rails - 如何使用warden.authenticate进行身份验证!