Rails:从控制器打开登录模式

时间:2017-04-20 00:24:01

标签: ruby-on-rails twitter-bootstrap

我正在构建一个电子商务应用,并拥有一个非常标准的用户模型和订单模型。对于用户下订单,他们必须首先登录。我使用Bootstrap模式作为标准登录\注册表单。

我正试图找到一种方法,当已退出访问者点击立即订购按钮(链接到/ orders / new)以显示登录\注册模式,然后在他们之后登录后,他们将被重定向到/ orders / new path。

这是我目前的订单#新方法:

 def new
   @order = Order.new
   if current_user
     @order.user = current_user
     @order.docs.build
   else
     redirect_to new_order_path
   end
 end

这是我当前的用户#new和用户#create方法。我使用this guide来设置模态。

def new
  @user = User.new
  respond_modal_with @user
end

def create
  @user = User.new(user_params)
  respond_modal_with @user, location: root_path
  respond_to do |format|
    if @user.save
     format.html {
       login(params[:user][:email], params[:user][:password])
       UserMailer.send_signup_email(@user).deliver_later
       redirect_to root_path, notice: "You have successfully signed up"
       }
     format.json { render :show, status: :created, location: @user }
    else
      format.html { render :new, alert: "Registration failed" }
      format.json { render json: @user.errors, status: :unprocessable_entity }
    end
  end
end

很抱歉,如果我在这里遗漏了重要信息。这是我第一次发帖,我是新手。在此先感谢您的帮助!

修改 评论建议我使用Devise进行授权,我应该提到我已经使用Sorcery进行身份验证\授权。所以这部分问题不是问题。我遇到的麻烦就是如何从Orders控制器触发模态。谢谢!

2 个答案:

答案 0 :(得分:1)

如果您想添加登录/注册等功能并执行所有这些操作,我建议您使用' devise'宝石。使用起来非常简单方便。您可以找到其文档here。它有几个方法,如user_signed_in?这将帮助您的问题退出用户显示登录页面,然后继续您的模态操作。 感谢

答案 1 :(得分:0)

要使用Devise以干燥的方式执行此操作,您可以使用StoreLocation模块。请参阅代码:https://github.com/plataformatec/devise/blob/7d3d6fb3f04caea95e343956a88654f753b45af4/lib/devise/controllers/store_location.rb

要使用它,您可以按照WIKI的说明进行操作:https://github.com/plataformatec/devise/wiki/How-To:-redirect-to-a-specific-page-on-successful-sign-in

差不多,你必须:

1.在application_controller中创建一个过滤器,以重定向到登录页面并保存当前路径:

def ensure_logged_in_or_redirect
  unless logged_in?
    store_location_for(:user, request.path)
    redirect_to new_user_session_path
  end
end

2.在application_controller中创建after_sign_in_path_for方法,如Wiki所示。

3.呼叫ensure_logged_in_or_redirect在您要保护的操作之前进行过滤,例如“新订单”。

希望有所帮助。