我希望我的网址使用破折号-
而不是下划线_
作为单词分隔符。例如controller/my-action
,而不是controller/my_action
.
我对两件事感到惊讶:
- 谷歌等。继续区分它们。
- Ruby on Rails 没有简单的全局配置参数来映射
-
到_
路由中。或者是吗?
我最好的解决方案是使用:as
或命名路线。
我的想法是修改 Rails 路由以检查该全局配置并在调度到控制器操作之前更改-
为。_
有没有更好的办法?
我希望我的网址使用破折号-
而不是下划线_
作为单词分隔符。例如controller/my-action
,而不是controller/my_action
.
我对两件事感到惊讶:
-
到_
路由中。或者是吗?我最好的解决方案是使用:as
或命名路线。
我的想法是修改 Rails 路由以检查该全局配置并在调度到控制器操作之前更改-
为。_
有没有更好的办法?
使用 Rails 3 及更高版本,您可以这样做:
resources :user_bundles, :path => '/user-bundles'
另一种选择是通过初始化程序修改 Rails。不过我不推荐这样做,因为它可能会在未来的版本中中断(编辑:在 Rails 5 中不起作用)。
: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
您可以重载控制器和操作名称以使用破折号:
# 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
您可以使用命名路由。它将允许使用“-”作为单词分隔符。在 routes.rb 中,
map.name_of_route 'a-b-c', :controller => 'my_controller', :action => "my_action"
现在像http://my_application/abc这样的 url将转到指定的控制器和操作。
此外,用于创建动态网址
map.name_of_route 'id1-:id2-:id3', :controller => 'my_controller', :action => "my_action"
在这种情况下,'id1、id2 和 id2 将作为 http 参数传递给操作
在你的行动和观点中,
name_of_route_url(:id1=>val1, :id2=>val2, :id3=>val3)
将评估为 url ' http://my_application/val1-val2-val3 '。
如果您在控制器和视图文件中使用下划线,那么只需在您的路由文件中使用破折号,它就会起作用..
获取 'blog/example-text' 这是我的控制器路线
def example_text end <-- 这是我的控制器
和 example_text.html.erb 是文件
这是实际的链接 site.com/blog/example-text
我认为这对我有用,而且它比强调 SEO 更有效