Rails:routes.rb并省略控制器名称

时间:2016-08-27 15:00:54

标签: ruby-on-rails routes

从Hartl的Rails教程书中,静态页面的一些路由是automatically generated

Rails.application.routes.draw do
  get  'static_pages/home'
  get  'static_pages/help'
  root 'application#hello'
end

为什么“主页”和“帮助”路由没有控制器#动作?
例如。 get 'static_pages/home', to: 'static_pages_controller#home'

我能找到的最接近文档的是Rails指南路由页面的static segments section

2 个答案:

答案 0 :(得分:0)

路线

get  'static_pages/home'
get  'static_pages/help'

没有与之关联的控制器/操作,因为这些页面的内容不是从控制器动态生成的。它们很可能是在public/static_pages/homepublic/static_pages/help的文件系统上定义的。公共目录可用于直接提供静态内容,而无需使用控制器。

编辑:

如果static_pages确实引用了控制器,则在创建<name of controller>/<name of action格式的路由时,很可能Rails能够派生控制器的名称和操作的名称。 Rails只假设“/”的左侧是控制器而右侧是动作。

答案 1 :(得分:0)

在浏览了一些文档后,发现没有任何相关内容,我看了一下源代码。似乎match方法(get是一个简写)正在调用get_to_from_path(已定义here),它从提供的{{path中提取控制器和方法信息。 1}},如果未提供to:

所以,对于这种情况,这个

get 'static_pages/home'
get 'static_pages/help'

映射到static_pages#homestatic_pages#help。在路径中使用短划线(-)而不是下划线(_)也可以。

奇怪的是,这个功能没有记录,更多的是它在教程中使用而没有解释。