jha*_*amm 6 routing ruby-on-rails ruby-on-rails-3
我的webapp中有管理员和普通用户.我想根据他们的身份使他们的根(/)不同.从许多不同的页面访问根,所以如果我能在routes.rb文件中实现这一点会容易得多.这是我目前的档案.
ProjectManager::Application.routes.draw do
root :to => "projects#index"
end
Run Code Online (Sandbox Code Playgroud)
有人可以把我链接到一个可以告诉我进入方向的例子吗?有没有办法将逻辑放入路径文件?谢谢你的帮助.
您只需为根路由创建控制器即可.
class RoutesController < ActionController::Base
before_filter :authenticate_user!
def root
root_p = case current_user.role
when 'admin'
SOME_ADMIN_PATH
when 'manager'
SOME_MANAGER_PATH
else
SOME_DEFAULT_PATH
end
redirect_to root_p
end
end
Run Code Online (Sandbox Code Playgroud)
在您的routes.rb中:
root 'routes#root'
Run Code Online (Sandbox Code Playgroud)
PS示例期望使用Devise,但您可以根据需要自定义它.
您无法真正动态地更改根,但有几种方法可以伪造它。
您想要的解决方案需要在您的应用程序控制器或“默认”根控制器中进行。最干净/最简单的解决方案就是让您的应用程序控制器重定向到仅针对该页面运行的 before 过滤器中的适当操作。然而,这将导致用户的 URL 发生变化,并且他们将不再真正处于根目录。
您的第二个选择是让您指定为 root 的方法在您正在寻找的任何条件下呈现不同的视图。但是,如果除了简单地加载单独的视图之外还需要对逻辑进行任何重大更改,那么最好不要重定向。