2011-03-17 150 views
67

我希望我的網址使用短劃線-而不是下劃線_作爲單詞分隔符。例如controller/my-action而不是controller/my_action在Ruby on Rails中使用短劃線`-`而不是下劃線`_`

我很驚訝兩兩件事:

  1. 谷歌等。繼續區分它們。
  2. Ruby on Rails沒有一個簡單的全局配置參數,用於在路由中映射-_。還是呢?

我的最佳解決方案是使用:as或命名路線。

我的想法是修改Rails路由以檢查該全局配置,並在調度到控制器操作之前將-更改爲_

有沒有更好的方法?

+0

我也喜歡破折號在URL中下劃線(以及在HTML/CSS元素ID,名稱和類),但我還沒有嘗試實現它。我會首先遷移到rails 3,然後擔心這個問題,因爲rails 3對中間件和路由有很大的升級。 – yfeldblum 2011-03-17 18:40:59

+0

感謝正義。我會延期,直到升級並熟悉v3。 – pduey 2011-03-23 15:57:07

回答

55

使用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 
+1

我是Rails的新手。你會添加一條這樣的文件到哪個文件中? – 2012-02-20 15:15:19

+0

請參閱本指南:http://guides.rubyonrails.org/routing.html – sandstrom 2012-02-21 17:20:45

+3

必須有一個更好更快的方式來將所有具有undersore的路線轉換爲連字符 – carbonr 2013-03-31 17:59:32

2

您可以使用命名路線。它將允許使用' - '作爲單詞分隔符。在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'。

+2

我想避免路由的手動維護,所以命名的路由已經結束。我只是想要軌道路由做批發的替代品,並保持我的配置文件緊張。 – pduey 2011-03-23 16:00:59

1
如果使用下劃線在控制器和視圖文件,然後只需使用破折號在你的路由文件,它會工作

..

得到「博客/例如文本」這是我這條路控制器

高清EXAMPLE_TEXT 結束< - 這是我的控制器

和example_text.html.erb是文件

,這是實際的鏈接網站。COM /博客/例如文本

我想這是我的作品,而不是強調SEO它更有效明智

2

可以重載控制器和動作名稱使用破折號:

# 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 
相關問題