在Ruby on Rails中使用短划线`-`而不是Underscore`_`
我想我的url使用短划线-
而不是下划线_
作为单词分隔符。 例如controller/my-action
而不是controller/my_action
。
我对两件事感到惊讶:
- Google等人。 继续区分它们。
- 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更有效