我有两个模型供应商和客户,在应用程序控制器中我为每个模型定义了after_sign_in_path_for
方法,但在注册并确认客户后,当我登录时,我重定向到供应商登录页面而不是dashboard_path
。是否出现此问题是因为我将两个模型的方法都放在应用程序控制器中,我应该将每个方法放在适当的会话控制器中吗?
我认为错误重定向的原因是无限循环。下面的应用程序控制器代码有什么问题吗? 我只在这个应用程序控制器中编写,其他所有内容都是内置的。
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
before_action :authenticate!
def after_sign_in_path_for(user)
if user && user.is_a?(Customer)
customer_dashboard_path
elsif user && user.is_a?(Vendor)
vendor_dashboard_path
end
end
def after_sign_out_path_for(user)
if user && user.is_a?(Customer)
root_path
elsif user && user.is_a?(Vendor)
root_path
end
end
def after_inactive_sign_up_path_for(user)
if user && user.is_a?(Customer)
root_path
elsif user && user.is_a?(Vendor)
root_path
end
end
def authenticate!
if @current_user == current_customer
:authenticate_customer!
elsif @current_user == current_vendor
:authenticate_vendor!
end
end
end
答案 0 :(得分:0)
您使用不同的参数编写两次相同的方法(方法覆盖)。所以它总会选择第二种方法after_sign_in_path_for(vendor)
。您可以将方法名称更改为您期望的名称,并相应地调用方法。
def after_sign_in_path_for_customer(customer)
dashboard_path
end
def after_sign_in_path_for_vendor(vendor)
dashboard_path
end
否则你可以有一个像
这样的常用方法def after_sign_in_path_for(user)
if user && user.is_a?(Vendor)
redirect to vendor dashbord
elsif user && user.is_a?(Customer)
redirect to customer dash board
end
end