Rails Routes – 斜杠字符与哈希字符
在URL和rails路由中,使用斜杠字符与井号(井号)字符有什么区别?
这些工作
get "/static_pages/about" get 'about', to: 'static_pages#about', as: :about
这些没有
get "/static_pages#about" get 'about', to: 'static_pages/about', as: :about get 'about', to: '/static_pages#about', as: :about
什么代码控制这种行为,背后的深层原因是什么?
回答:
(这两个人回答得非常好,我很难选择哪一个标记为接受的答案。我希望以一种可能有助于人们的不同方式表明我对答案的理解。)
使用/符号后,字符串将被识别为附加到基本URL的URL字符串。 所以’#’字符将被解释为url的一部分,而url不喜欢使用’#’字符。
在不使用/字符的情况下,第一个单词以某种方式被识别为控制器名称,您可以使用“#”和操作名称进行跟进。
to: 'static_pages#about'
表示static_pages_controller
。 语法是controller#action
。
当你定义get "/static_pages#about"
, static_pages#about
成为路由的控制器,即#
只是一个字符文字而#about
并不意味着操作。 如果static_pages#about
controller不存在,则应该missing :controller
错误。
以下路由定义为您提供/about
映射到static_pages/about
控制器about
操作的路径,其中static_pages
可以是命名空间或范围。
get 'about', to: 'static_pages/about', as: :about
以下路由无效,并且由于前导斜杠/
输入选项而应该抛出错误。
get 'about', to: '/static_pages#about', as: :about
在ruby中,哈希符号通常位于类的实例方法的名称之前。 请参阅Array类文档( http://www.ruby-doc.org/core-2.1.0/Array.html )页面的左侧边栏。
get "/static_pages#about"
不起作用,因为#about
不是url的一部分。
get 'about', to: 'static_pages/about', as: :about
不起作用,因为/about
不指示应该调用哪个控制器方法。
get 'about', to: '/static_pages#about', as: :about
因为static_pages之前的斜杠而无效。