在Ruby on Rails中使用短划线`-`而不是Underscore`_`

我想我的url使用短划线-而不是下划线_作为单词分隔符。 例如controller/my-action而不是controller/my_action

我对两件事感到惊讶:

  1. Google等人。 继续区分它们。
  2. Ruby on Rails在路由中没有一个简单的全局configuration参数来映射到_ 。 还是呢?

我最好的解决scheme是使用:as或命名的路线。

我的想法是修改Rails路由来检查该全局configuration,并在调度到控制器操作之前更改为_

有没有更好的办法?

使用Rails 3和更高版本,你可以这样做:

 resources :user_bundles, :path => '/user-bundles' 

另一个select是通过初始化器来修改Rails。 我不推荐这个,因为它可能会在未来的版本中打破。

使用:path如上所示的:path更好。

 # Using private APIs is not recommended and may break in future Rails versions. # https://github.com/rails/rails/blob/4-1-stable/actionpack/lib/action_dispatch/routing/mapper.rb#L1012 # # config/initializers/adjust-route-paths.rb module ActionDispatch module Routing class Mapper module Resources class Resource def path @path.dasherize end end end end end end 

您可以使用命名路线。 它将允许使用“ – ”作为单词分隔符。 在routes.rb中,

 map.name_of_route 'ab-c', :controller => 'my_controller', :action => "my_action" 

现在像http:// my_application / abc将会去指定的控制器和操作。

另外,用于创builddynamicurl

 map.name_of_route 'id1-:id2-:id3', :controller => 'my_controller', :action => "my_action" 

在这种情况下,id1,id2和id2将作为http params传递给动作

在你的行为和观点中,

 name_of_route_url(:id1=>val1, :id2=>val2, :id3=>val3) 

将评估到URL'http:// my_application / val1-val2-val3 '。

您可以重载控制器和操作名称以使用破折号:

 # config/routes.rb resources :my_resources, path: 'my-resources' do collection do get 'my-method', to: :my_method end end 

你可以在控制台中testing:

 rails routes -g my_resources my_method_my_resources GET /my-resources/my-method(.:format) my_resources#my_method 

如果您在控制器和视图文件中使用下划线,那么只需在您的路线文件中使用破折号,它将工作。

得到'博客/示例文本'这是我的这个控制器的路线

def example_text end < – 这是我的控制器

example_text.html.erb是文件

这是实际的链接site.com/blog/example-text

我觉得这是对我来说是有用的,它比强调SEO更有效