ahn*_*cad 6 url syntax routing ruby-on-rails rails-routing
在URL和rails路由中,使用斜杠字符与井号(井号)字符有什么区别?
这些工作
get "/static_pages/about"
get 'about', to: 'static_pages#about', as: :about
Run Code Online (Sandbox Code Playgroud)
这些没有
get "/static_pages#about"
get 'about', to: 'static_pages/about', as: :about
get 'about', to: '/static_pages#about', as: :about
Run Code Online (Sandbox Code Playgroud)
什么代码控制着这种行为,背后的深层原因是什么?
回答:
(这两个人回答得非常好,我很难选择哪一个标记为接受的答案.我希望以不同的方式表达我对答案的理解,这可能对人们有所帮助.)
使用/符号后,字符串将被识别为附加到基本URL的URL字符串.所以'#'字符将被解释为url的一部分,而url不喜欢使用'#'字符.
在不使用/字符的情况下,第一个单词以某种方式被识别为控制器名称,您可以使用"#"和操作名称进行跟进.
在 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由于 static_pages 前面有斜杠,因此不起作用。
in#表示to: 'static_pages#about'的about动作static_pages_controller。语法是controller#action.
当您定义 时get "/static_pages#about",static_pages#about成为路线的控制器,即,它#只是一个字符文字,#about并不意味着about操作。missing :controller如果static_pages#about控制器不存在, 您应该收到错误消息。
以下路由定义为您提供了映射到控制器操作的/about路径,其中可以是命名空间或范围。 static_pages/aboutaboutstatic_pages
get 'about', to: 'static_pages/about', as: :about
Run Code Online (Sandbox Code Playgroud)
以下路由无效,并且由于选项/中的前导斜杠而应引发错误to。
get 'about', to: '/static_pages#about', as: :about
Run Code Online (Sandbox Code Playgroud)