2017-04-20 24 views
0

私は電子商取引アプリケーションを構築しており、かなり標準的なユーザモデルと注文モデルを持っています。ユーザーが注文するには、最初にログインする必要があります。私は、標準のログインフォームにBootstrapモーダルを使用しています。Rails:コントローラからログインモーダルを開く

私は、がログアウトしたときの方法を見つけようとしています訪問者はログイン\サインアップモーダルを表示するために注文ボタン(/ 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 

はここに私の現在のユーザー#新しいとユーザー#がメソッドを作成します:

は、ここに私の現在の受注#新しい方法です。私は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コントローラからモーダルをトリガする方法です。ありがとう!

+0

ユーザーが既にログに記録されているかどうかを確認し、sign_upメソッド内でリダイレクトを行うか、ログに記録するために使用している場合は、Deviseを使用するか、独自の認証を行う必要があります。しかし、あなたの意見のコードがないので何が間違っているのかを知ることは難しいので、それらを追加してみてください。 –

+0

ありがとう@SebastiánPalma!私は認証のためにSorceryを使用しています。 Ordersコントローラの代わりにUserコントローラからリダイレクトすることでそれに近づいてみます。乾杯! –

+0

私はDeviseとは異なり、Sorceryが 'logged_in?'メソッドを使ってログに記録されたユーザーを確認しているのを見ました。 –

答えて

1

こんにちは、ログイン/サインアップなどの機能を追加し、それらの操作をすべて実行する場合は、「devise」宝石を使用することをおすすめします。使用するのはとても簡単で便利です。そのドキュメントhereを見つけることができます。それはuser_signed_inのようないくつかの方法を持っていますか?あなたの問題がログアウトページを表示してモーダル操作を続行するようにユーザーをサインアウトするのに役立ちます。 ありがとう

+0

ありがとうAashish!私は認証のためにSorceryを使用しています。既に、私は彼らのドキュメントを見て、彼らがこれを解決する方法を提案するかどうかを見ていきます。乾杯! –

0

これを行うには、Deviseを使用してDRY方法でStoreLocationモジュールを使用できます。コードを参照してください。https://github.com/plataformatec/devise/blob/7d3d6fb3f04caea95e343956a88654f753b45af4/lib/devise/controllers/store_location.rb

、あなたは彼らのWIKIからの指示に従うことができることを使用するには:

1.Createにリダイレクトするためにあなたのapplication_controllerでフィルタ:かなり多くのhttps://github.com/plataformatec/devise/wiki/How-To:-redirect-to-a-specific-page-on-successful-sign-in

を、あなたがする必要がありますサインインページと現在のパスを保存します

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

2.Createウィキに示すようにapplication_controllerでもafter_sign_in_path_for方法を、。

3.「新しい注文」のように、あなたが保護したいと思う行動の前にフィルターをかける。ensure_logged_in_or_redirect

希望に役立ちます。

+0

ありがとうアーサー!私は解決策を見つけましたが、最良のアプローチではないと確信しています。私はコードを整理する時間があるときにそれを再訪します。乾杯! –

関連する問題