我目前正在学习ROR,并且已根据用户类型遇到有关不同根页面的小问题。在我的用户模型中,我有一个admin属性,根据用户的不同,该属性为true或false。
请在下面查看我的路线文件,即使所有用户都将管理员设置为false,当前所有用户都将访问“ houses#index”。
我在路线文件中看不到哪里出了错。
反正我的路由文件中是否为已认证用户添加了属性admin的条件?
Routes.rb
Rails.application.routes.draw do
devise_for :user
get 'welcome/index'
resources :houses
resources :tenants
resources :requests
authenticated :user do
root 'houses#index', as: "authenticated_root"
end
authenticated :user, {admin:'false'} do
root 'requests#index', as: "authenticated_root1"
end
root 'welcome#index'
end
model \ User.rb
class User < ActiveRecord::Base
# Include default devise modules. Others available are:
# :confirmable, :lockable, :timeoutable, :trackable and :omniauthable
devise :database_authenticatable, :registerable,
:recoverable, :rememberable, :validatable
has_many :houses
has_many :tenants
has_many :requests
def admin?
admin
end
end
谢谢。
答案 0 :(得分:1)
您应该在application_controller中使用after_sign_in_path_for
devise的方法。
例如:
def after_sign_in_path_for(resource)
stored_location_for(resource) || (resource.admin? ? admin_dashboard_url : user_dashboard_url(resource))
end
(请注意,资源就像用户实例的别名。默认情况下,它是路由中声明的第一个devise角色,如下所示:https://stackoverflow.com/a/40825885/10347572)
对于所有其他请求,如果您不使用Cancan,请创建一个新方法(与上面的方法非常相似)以根据用户的类型重定向用户(但如果用户要访问管理页面,则可以应该引发404,而不仅仅是根重定向)