ログインしていないユーザーがこのページの [Deja Tu Opinion] ボタンをクリックすると:
...ユーザーはログインページにリダイレクトされ、「続行する前にログインまたはサインアップする必要があります」というメッセージが表示されます。私はこれを行いました - ここでは問題ありません。
「Deja Tu Opinion」ボタンは、new_testimonial_path に移動します。ただし、ログインしていない場合は、ログイン ページにリダイレクトされます。「require_login」メソッドを記述し、アプリケーション コントローラーを配置することでこれを実現しました。
class ApplicationController < ActionController::Base
# Prevent CSRF attacks by raising an exception.
# For APIs, you may want to use :null_session instead.
protect_from_forgery with: :exception
private
def require_login
if !logged_in?
redirect_to('/user_sessions/new')
flash[:notice] = "Necesitas entrar o salir antes de continuar"
end
end
end
次に、証言コントローラーで宣言しました。
class TestimonialsController < ApplicationController
before_action :set_testimonial, only: [:show, :edit, :update, :destroy]
# before_action :correct_user, only: [:edit, :update, :destroy]
before_action :require_login, except: [:index, :show]
ログインすると、root_path にリダイレクトされます。
class UserSessionsController < ApplicationController
# skip_before_filter :require_login, except: [:destroy]
def new
@user = User.new
end
def create
if @user = login(params[:email], params[:password])
redirect_to root_url, notice: 'Login successful!'
else
flash.now[:alert] = 'Login failed'
render action: 'new'
end
end
def destroy
logout
redirect_to(root_url, notice: 'Logged out!')
end
end
ただし...私が望んでいるのは、この状況では、root_pathに戻るだけでなく、new_testimonial_pathに誘導されることです。
つまり、要約すると、ログインしていないユーザーが「自分の意見を書く」ボタン (「自分の証言を書く」という意味) をクリックすると、ログインしていないため、new_user_session_path に誘導されます。次にログインすると、root_path に戻ります。そこで、ページをもう一度下にスクロールして、[Deja tu Opinion] ボタンをクリックする必要があります。これにより、new_testimonial_path に移動します。
ログインしていないユーザーが「意見を聞く」ボタンをクリックすると、ログインしていないため、new_user_session_path に誘導されます。次にログインすると、new_testimonial_path に誘導されます (最初にそれを望んでいたためです)。
私は Sorcery gem を使用しました。「redirect_back_or_to」と呼ばれるこれを実現する方法があると確信していますが、ドキュメントからその使用方法を理解することはできません。
アプリのコード全体 (create_testimonials ブランチ): https://github.com/Yorkshireman/pamplona_english_teacher2/tree/create_testimonials
ソーサリーのドキュメント: https://github.com/NoamB/sorcery
あなたが助けてくれることを願っています!