这里有个小问题,我似乎无法将管理员用户路由到适当的位置。我已经设置设计并添加了列admin并将其设置为布尔值。然后我将我的用户更新为admin => true,并在控制台中验证了这一点。
当我登录到我的应用程序的用户被路由到一个页面和管理员用户应该路由到另一个,这是什么我有到目前为止
authenticated :current_admin_user do
root :to => 'book#searchbook'
end
authenticated :user do
root :to => 'search#index'
end
root :to => 'main#index'
然而,当我作为admin用户登录时,我被路由到"搜索#索引",就像我是一个普通用户一样。我需要做什么才能让管理员用户路由到"book#searchbook"。我以前从来没有遇到过这个问题
感谢您的帮助
编辑在进一步研究之后我需要为admin用户指定after_sign_in_path,目前我有这个
def after_sign_in_path_for(resource)
if current_admin_user
searchbook_path
else
root_path
end
end
但是它仍然引导我到用户登录页面
谢谢
看来我还缺了点东西,如果有人遇到过类似的问题我是这么做的
在User模型中我添加了
def is_admin?
self.admin == 1
end
然后在我的应用程序控制器中我添加了这些方法
def authenticate_admin_user!
authenticate_user!
unless current_user.admin?
flash[:alert] = "This area is restricted to administrators only."
redirect_to root_path
end
end
def current_admin_user
return nil if user_signed_in? && !current_user.admin?
current_user
end
def after_sign_in_path_for(resource)
if current_user.admin?
searchbook_path
else
root_path
end
end
,然后在只有admin用户可以访问的控制器中,我添加了before_filter
before_filter :authenticate_admin_user!
希望这能帮助到同样处境的人(感谢Jayson Lane)
原来他9个月前帮过我同样的问题…
试着实现下面的代码。当我在控制器中使用此代码时…
def after_sign_in_path_for(resource_or_scope)
if resource_or_scope.is_a?(User)
return root_path
else
return search_path
end
end