我有两个控制器:Tasksadmins和Workers。
我定义了两个根,但有人告诉我它存在问题。
有人可以告诉我这是什么问题吗?
TODOLIST::Application.routes.draw do
devise_for :users
resources :tasksadmins
root to: "tasksadmins#index"
resources :workers
root to: "workes#index"
end
答案 0 :(得分:3)
路由DSL的root
方法允许您为应用程序或特定命名空间定义默认路由:您不能有多个“根”路由。
资源的默认路由(例如/workers
)被路由到相应控制器(WorkersController
)的索引操作,不需要为每个控制器指定它。
如果多次使用root
方法,将使用最后一次出现。这将是workers#index
。简化您的路线:
TODOLIST::Application.routes.draw do
root to: "workers#index"
devise_for :users
resources :tasksadmins
resources :workers
end
答案 1 :(得分:3)
root
并不代表控制器的index
操作。相反,它本质上意味着主页:当我转到http://www.example.com/
时会调用什么动作?
因此,仅定义一个root
才有意义:现在,您将http://www.example.com/
指向tasksadmins#index
和workers#index
,这并不是很有效感。 Rails只选择其中一个,但这可能不是你想要的行为。
我怀疑您正在尝试优化resources
路由,但没有必要:resources :workers
已经定义了指向http://www.example.com/workers
的路由workers#index
,因此该行应该是工人们所需要的一切。
但是,如果您希望http://www.example.com/
指向与http://www.example.com/workers
相同的工作人员列表,则root 'workers#index'
完全正确。