8

我创建了一个设计用户模型。有两种类型的用户:

  • 顾客
  • 行政

我已经完成了 bij 创建两个“正常”模型:客户和管理员。这两个模型继承自用户模型,如下所示:

class Customer < User

有谁知道我如何为每种类型的用户设置根路径。我想要这样的东西:

authenticated :customer do
  root :to => "customer/dashboard#index"
end

authenticated :admin do
  root :to => "admin/dashboard#index"
end    

更新:

我已经解决了这个问题:

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' }
4

3 回答 3

7

虽然是一个老问题,但没有答案,它可能对其他人有用。

在 rails 3.2 中(我从来没有用任何更低的东西测试过它)你可以在你的 routes.rb 文件中做到这一点

authenticated :admin_user do
  root :to => "admin_main#index"
end

然后将您的正常根路由进一步向下。

然而,这似乎在 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

在此处记录,但请注意,这似乎只是一个临时修复,因此将来可能会再次更改

于 2013-06-28T17:37:41.790 回答
3

你可以做的是有一个单一的根路径,比如说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
于 2012-11-06T17:55:37.080 回答
0

Using after_sign_in_path_for should be appropriate. So add this to your application_controller.rb:

def after_sign_in_path_for(resource)
  if resource.type == 'customer'
    your_desired_customer_path
  else
    your_desired_admin_path
  end
end
于 2013-12-20T14:51:51.437 回答