Rails:一些索引路由显示" / controller_name / index"其他人只是在显示" / controller_name"

时间:2017-08-04 16:42:20

标签: ruby-on-rails

我真的很困惑,因为我使用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,如果这有帮助的话)

1 个答案:

答案 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