在网址和路由路由中,使用斜杠字符与井号(井号)字符有什么区别?
这些工作
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不喜欢使用'#'字符。
如果不使用/字符,第一个单词会以某种方式被识别为控制器名称,您可以使用“#”和操作名称进行跟进。
答案 0 :(得分:4)
在ruby中,哈希符号通常位于类的实例方法的名称之前。请参阅Array类文档页面的左侧边栏(http://www.ruby-doc.org/core-2.1.0/Array.html)。
get "/static_pages#about"
不起作用,因为#about
不属于网址。
get 'about', to: 'static_pages/about', as: :about
不起作用,因为/about
未指明应调用哪种控制器方法。
get 'about', to: '/static_pages#about', as: :about
不起作用。
答案 1 :(得分:2)
#
中的to: 'static_pages#about'
表示about
的{{1}}行为。语法为static_pages_controller
。
当您定义controller#action
时,get "/static_pages#about"
成为路线的控制者,即static_pages#about
只是字符文字而#
并不代表#about
操作。如果about
控制器不存在,您应该收到missing :controller
错误。
以下路由定义为您提供static_pages#about
路径,该路径映射到/about
控制器的static_pages/about
操作,其中about
可以是命名空间或范围。
static_pages
以下路由无效,并且由于get 'about', to: 'static_pages/about', as: :about
选项中的前导斜杠/
而导致错误。
to