我真的很困惑,因为我使用controllername_index_url
时的某些路线会路由到/controllername/index
,而其他路由则路由到/controllername
。
主要区别在于当我通过命令行创建控制器时生成索引方法
rails g controller controllerName1 index
然后该路线变为/controller_name_1/index
。
创建控制器后手动创建索引时,它变为/controllername2
在我的 config / routes 中,我将控制器包括在内:
Rails.application.routes.draw do
resources :controller_name_1
resources :controller_name_2
end
当我做rails routes
时,我的路线看起来像
controller_name_1_index GET /controller_name_1/index(.:format) controlle_name_1#index
controller_name_2_index GET /controller_name_2(.:format) controller_name_2#index
为什么会以不同方式自动添加路线?我怎样才能做到这一点,无论如何我在命令行上生成索引方法或在事后添加它们,controller_name_index_url
路由总是相同的格式? (我使用ruby 2.4.0和rails 5.1.2,如果这有帮助的话)
答案 0 :(得分:1)
在命令行创建操作时,会自动为其生成路径。
$ rails g controller ones index
create app/controllers/ones_controller.rb
route get 'ones/index' # route helper is ones_index
...
此行为完全与您正在创建的操作无关。它可以是任何动作名称,Rails也会做同样的事情
$ rails g controller twos smorgas
create app/controllers/twos_controller.rb
route get 'twos/smorgas' # route helper is twos_smorgas
...
向路线添加资源时
resources :ones
无论您如何创建任何REST操作,都会自动获得所有默认的REST路由帮助程序和路由。
$ rake routes
ones GET /ones(.:format) ones#index
POST /ones(.:format) ones#create
new_one GET /ones/new(.:format) ones#new
edit_one GET /ones/:id/edit(.:format) ones#edit
one GET /ones/:id(.:format) ones#show
PATCH /ones/:id(.:format) ones#update
PUT /ones/:id(.:format) ones#update
DELETE /ones/:id(.:format) ones#destroy
最好坚持使用Rails约定并使用默认路由助手
ones_url
ones_path
# not ones_index_url
如果要禁用自动路由生成,请参阅this SO question