我有三个角色的用户模型,管理员、买家和卖家。我还有一个仪表板控制器,当前登录时每个用户都被引导到不同的仪表板操作。。。
application_controller.rb
def after_sign_in_path_for(resource)
case resource.role
when "buyer"
buyer_dash_path
when "seller"
seller_dash_path
when "admin"
admin_dash_path
end
end
routes.rb
get 'dashboard/admin' => 'dashboard#admin', as: 'admin_dash'
get 'dashboard/seller' => 'dashboard#seller', as: 'seller_dash'
get 'dashboard/buyer' => 'dashboard#buyer', as: 'buyer_dash'
因此,当买家登录时,他们会被重定向到"/dashboard/buyer",管理员则会重定向到"/diashboard/admin"等。。如何删除操作名称以便将所有用户重定向到"/dashboard"?
您最好使用以下内容:
#config/routes.rb
resources :dashboard, only: [:index] #-> url.com/dashboard
#app/controllers/dashboard_controller.rb
class DashboardController < ApplicationController
def index
case current_user.role
when "admin"
#do something
render "dashboard/admin"
when "seller"
#do something
render "dashnoard/seller"
else
#do something
end
end
end
#app/views/dashboard/index.html.erb
<!-- do stuff in here -->
您只能留下一条路线:
get 'dashboard' => 'dashboard#index'
并在控制器中引入新动作:
def index
redirect_to root_path unless current_user
send(current_user.role)
render current_user.role
end
例如,如果当前用户是seller
,则index
操作将执行以下操作:
seller()
render 'seller'
通过这些更改,您不需要更改应用程序中的任何其他内容。