default: { action: 'method' } 在 rails 路由中做什么?

What does default: { action: 'method' } do in rails routes?

我遇到了线:

resources :assesments, default: {action: :index }

在 rails 条路线内。

rake routes 对于 resources :assesments 打印:

        Prefix Verb   URI Pattern                    Controller#Action
    assesments GET    /assesments(.:format)          assesments#index
               POST   /assesments(.:format)          assesments#create
 new_assesment GET    /assesments/new(.:format)      assesments#new
edit_assesment GET    /assesments/:id/edit(.:format) assesments#edit
     assesment GET    /assesments/:id(.:format)      assesments#show
               PATCH  /assesments/:id(.:format)      assesments#update
               PUT    /assesments/:id(.:format)      assesments#update
               DELETE /assesments/:id(.:format)      assesments#destroy

并且对于 default: { action: :index} 它打印:

        Prefix Verb   URI Pattern                    Controller#Action
    assesments GET    /assesments(.:format)          assesments#index {:default=>{:action=>:index}}
               POST   /assesments(.:format)          assesments#create {:default=>{:action=>:index}}
 new_assesment GET    /assesments/new(.:format)      assesments#new {:default=>{:action=>:index}}
edit_assesment GET    /assesments/:id/edit(.:format) assesments#edit {:default=>{:action=>:index}}
     assesment GET    /assesments/:id(.:format)      assesments#show {:default=>{:action=>:index}}
               PATCH  /assesments/:id(.:format)      assesments#update {:default=>{:action=>:index}}
               PUT    /assesments/:id(.:format)      assesments#update {:default=>{:action=>:index}}
               DELETE /assesments/:id(.:format)      assesments#destroy {:default=>{:action=>:index}}

默认操作有什么变化?

编辑

我打错了。应该是:

resources :assesments, defaults: {action: :index }

rake routes现在看起来正常:

        Prefix Verb   URI Pattern                    Controller#Action
    assesments GET    /assesments(.:format)          assesments#index
               POST   /assesments(.:format)          assesments#create
 new_assesment GET    /assesments/new(.:format)      assesments#new
edit_assesment GET    /assesments/:id/edit(.:format) assesments#edit
     assesment GET    /assesments/:id(.:format)      assesments#show
               PATCH  /assesments/:id(.:format)      assesments#update
               PUT    /assesments/:id(.:format)      assesments#update
               DELETE /assesments/:id(.:format)      assesments#destroy

TL;DR

如果我们有

resources :assesments, defaults: { format: 'jpg' }, default: { format: 'xml'}

我们访问 localhost/assessmentsparams 散列看起来像:

{
 "format"=>"jpg", # FROM defaults: {}
 "default"=> { "format"=>"xml" }, # FROM default: {}
 "controller"=>"assesments", WE CAN NOT CHANGE IT. COMES FROM RAILS
 "action"=>"index" # WE CAN NOT CHANGE IT. COMES FROM RAILS
}

--- 更多

defaults: { anything_key: 'any_value' } 会将散列内容添加到控制器内部可访问的 params 散列(但是您不能覆盖控制器提供的值 - 即::action:controller) .

添加 defaults: { action: :anything } 不会有任何效果,但添加 defaults: { format: 'jpg' } 会将 { format: 'jpg' } 添加到路由范围包装的所有控制器内的 params 哈希。

添加 default: { some_key: 'value' } 会将此散列 (default: { some_key: 'value' }) 添加到由路由范围包装的控制器内的每个参数散列。