Mic*_*ost 8 ruby-on-rails devise ruby-on-rails-3
我已经创建了一个设计用户模型.有两种类型的用户:
我已经完成了bij创建两个"正常"模型:客户和管理员.这两个模型继承自用户模型,如下所示:
class Customer < User
Run Code Online (Sandbox Code Playgroud)
有谁知道如何为每种类型的用户设置根路径.我想要这样的东西:
authenticated :customer do
root :to => "customer/dashboard#index"
end
authenticated :admin do
root :to => "admin/dashboard#index"
end
Run Code Online (Sandbox Code Playgroud)
更新:
我已经解决了这个问题:
root :to => "pages#home", :constraints => lambda { |request|!request.env['warden'].user}
root :to => 'customer/dashboard#index', :constraints => lambda { |request| request.env['warden'].user.type == 'customer' }
root :to => 'admin/dashboard#index', :constraints => lambda { |request| request.env['warden'].user.type == 'admin' }
Run Code Online (Sandbox Code Playgroud)
虽然是一个老问题,但没有答案,它可能对其他人有用.
在rails 3.2中(我从未测试过任何更低的东西)你可以在routes.rb文件中执行此操作
authenticated :admin_user do
root :to => "admin_main#index"
end
Run Code Online (Sandbox Code Playgroud)
然后让你的正常根路径进一步下降.
然而,这似乎不适用于rails 4 Invalid route name, already in use: 'root' (ArgumentError)(因为我刚刚发现并且在我遇到这个问题时正在寻找解决方案),如果我找到一种方法在rails 4中这样做我会更新我的回答
编辑:
好吧,对于rails 4来说,修复非常简单但不是那么明显.您需要做的就是通过添加as来使第二个根路由成为命名路由:像这样:
authenticated :admin_user do
root :to => "admin_main#index", as: :admin_root
end
Run Code Online (Sandbox Code Playgroud)
这是在这里记录的,但请注意,它似乎只是一个临时修复,因此将来可能会再次更改
您可以做的是拥有一个根路径,并home#index在相应的控制器操作中根据用户类型执行重定向。
例如:
def index
if signed_in?
if current_user.is_a_customer?
#redirect to customer root
elsif current_user.is_a_admin?
#redirect to admin root
end
end
end
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4805 次 |
| 最近记录: |