在Ruby on Rails中使用短划线`-`而不是下划线`_`
我希望我的网址使用短划线-
而不是下划线_
作为单词分隔符。例如controller/my-action
而不是controller/my_action
。在Ruby on Rails中使用短划线`-`而不是下划线`_`
我很惊讶两两件事:
- 谷歌等。继续区分它们。
- Ruby on Rails没有一个简单的全局配置参数,用于在路由中映射
-
到_
。还是呢?
我的最佳解决方案是使用:as
或命名路线。
我的想法是修改Rails路由以检查该全局配置,并在调度到控制器操作之前将-
更改为_
。
有没有更好的方法?
使用Rails 3和以后你可以这样做:
resources :user_bundles, :path => '/user-bundles'
另一种选择是修改的Rails,通过初始化。 虽然我不推荐这样做,因为它可能在未来的版本中打破。
如上所示使用: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 'a-b-c', :controller => 'my_controller', :action => "my_action"
现在的URL像http://my_application/a-b-c会去指定的控制器和动作。
此外,用于创建动态URL
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)
将评估为网址'http://my_application/val1-val2-val3'。
我想避免路由的手动维护,所以命名的路由已经结束。我只是想要轨道路由做批发的替代品,并保持我的配置文件紧张。 – pduey 2011-03-23 16:00:59
..
得到“博客/例如文本”这是我这条路控制器
高清EXAMPLE_TEXT 结束< - 这是我的控制器
和example_text.html.erb是文件
,这是实际的链接网站。COM /博客/例如文本
我想这是我的作品,而不是强调SEO它更有效明智
可以重载控制器和动作名称使用破折号:
# config/routes.rb
resources :my_resources, path: 'my-resources' do
collection do
get 'my-method', to: :my_method
end
end
你可以在控制台测试:
rails routes -g my_resources
my_method_my_resources GET /my-resources/my-method(.:format) my_resources#my_method
我也喜欢破折号在URL中下划线(以及在HTML/CSS元素ID,名称和类),但我还没有尝试实现它。我会首先迁移到rails 3,然后担心这个问题,因为rails 3对中间件和路由有很大的升级。 – yfeldblum 2011-03-17 18:40:59
感谢正义。我会延期,直到升级并熟悉v3。 – pduey 2011-03-23 15:57:07