Rails控制器名称带有破折号而不是下划线

set*_*rgo 8 url seo ruby-on-rails ruby-on-rails-3

当引用控制器时,是否可以强制Rails使用短划线( - )而不是下划线.

目前存在一个很好的被Inflector调用函数parameterize.它允许非常好的永久链接删除所有特殊字符并替换为破折号...

但是,当使用具有多个单词的控制器(contact_methods_controller.rb例如)时,您可以定义路线:

resources :contact_methods
Run Code Online (Sandbox Code Playgroud)

这会创建一个到/contact_methods(NOT /contact-methods)的地图.当我混合这两个时,我会得到丑陋的URL:

/contact_methods/1-preferred-email
Run Code Online (Sandbox Code Playgroud)

我想让Rails地图控制器用破折号而不是下划线.我所有的研究都说要分别映射每个控制器:

match 'contact-methods(/:action)' => 'contact_methods'
Run Code Online (Sandbox Code Playgroud)

但在我看来,这真的是愚蠢的,如果我在嵌套资源,它会变得混乱......我不应该将它们定义为自定义路径.是否有ActionDispatch自动重写这些内容的设置?我找不到一个......

fl0*_*00r 11

在你的route.rb

resources "contact-methods", :controller => :contact_methods, :as => :contact_methods
Run Code Online (Sandbox Code Playgroud)

编辑:你必须指定:as => ...路径或者ActionDispatch抛出一个合适的...