Rails Routes - 斜杠字符与哈希字符

时间:2014-01-27 03:43:05

标签: ruby-on-rails url syntax routing rails-routing

在网址和路由路由中,使用斜杠字符与井号(井号)字符有什么区别?

这些工作

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不喜欢使用'#'字符。

如果不使用/字符,第一个单词会以某种方式被识别为控制器名称,您可以使用“#”和操作名称进行跟进。

2 个答案:

答案 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未指明应调用哪种控制器方法。

由于static_pages之前的斜杠,

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