我希望自己的网址使用破折号-
而不是下划线_
作为单词分隔符。例如controller/my-action
代替controller/my_action
。
我对两件事感到惊讶:
- Google等。继续区分它们。
- Ruby on Rails没有一个简单的全局配置参数可以映射
-
到_
路由中。还是呢?
我最好的解决方案是使用:as
或命名路由。
我的想法是修改Rails路由以检查该全局配置,并在分派到控制器操作之前更改-
为_
。
有没有更好的办法?
我希望自己的网址使用破折号-
而不是下划线_
作为单词分隔符。例如controller/my-action
代替controller/my_action
。
我对两件事感到惊讶:
-
到_
路由中。还是呢?我最好的解决方案是使用:as
或命名路由。
我的想法是修改Rails路由以检查该全局配置,并在分派到控制器操作之前更改-
为_
。
有没有更好的办法?
Answers:
使用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
您可以使用命名路由。它将允许使用“-”作为单词分隔符。在routes.rb中,
map.name_of_route 'a-b-c', :controller => 'my_controller', :action => "my_action"
现在,像http:// my_application / abc之类的网址将转到指定的控制器和操作。
另外,用于创建动态网址
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)
将评估为网址“ http:// my_application / val1-val2-val3 ”。