【问题标题】:What does default: { action: 'method' } do in rails routes?default: { action: 'method' } 在 rails 路由中有什么作用?
【发布时间】:2015-09-25 11:47:22
【问题描述】:

我遇到了一行:

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

在铁路路线内。

rake routesresources :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

【问题讨论】:

  • 我没有看到任何名为 default 的选项 -> here
  • 它什么也没做。
  • 但是,我在guide 中看到了这个选项。
  • @EgonWilzer 我认为该选项对resources 没有帮助,但在您创建一些动态路线时很有帮助。
  • default 告诉路由如果没有指定使用哪个动作。 index 是标准默认值,因此设置“默认值:索引”不会有任何区别,因为无论如何它都会默认为索引。

标签: ruby-on-rails ruby ruby-on-rails-4 routes


【解决方案1】:

TL;DR

如果我们有

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

我们会访问 localhost/assessments 而不是 params 哈希看起来像:

{
 "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' })添加到路由范围包裹的控制器内的每个参数哈希中。

【讨论】:

    猜你喜欢
    • 2015-10-23
    • 1970-01-01
    • 2012-01-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多