2012-09-07 126 views
3


我知道Rails使用控制器動作風格的URL像www.myapp.com/home/index例如
我想有這樣的網址在我的Rails應用程序,www.myapp.com/my_page_here這是可能的,如果這樣會怎樣我去解決這個問題?自定義URL

回答

6

你只是在用get之外的任何resourcesnamespace塊的你routes.rb file:

get 'my_page_here ', :to => 'home#index' 

假設您使用的是Rails 3+,請勿使用match。這可能很危險,因爲如果頁面接受來自表單的數據,它應該接受POST請求。 match會允許GET請求帶有副作用 - 這是不好的。

如果可能,請始終使用getput,post或這些變體。

爲了得到一個路徑幫手,試試:

get 'my_page_here ', :to => 'home#index', :as => :my_page 

這樣一來,在您的看法,my_page_path將等於http://{domain}/my_page_here

+0

最後在末尾添加':as =>:my_page',並在您的視圖中使用'my_page_path'助手。 – dimitarvp

+0

大awnser :) – Francois

+0

有點遲了,但路徑助手會生成路徑而不是url。因此'my_page_path'將返回'「/ my_page_here」'。 – rubish

3

你只需要做出一個路由規則到該網址 匹配在這種情況下它會像

match 'my_page_here' => 'your_controller#your_action' 

您的控制器和動作將指定頁面的行爲

,所以你可以做

match 'my_page_here' => 'home#index' 

get 'my_page_here', :to => 'home#index' 

正如其他答覆中所建議的那樣。

在家庭控制器索引操作,如果你有這樣的控制器

http://guides.rubyonrails.org/routing.html更多細節

也看到Ruby on Rails Routes - difference between get and match

+0

'match'是舊的,不應該被使用! – ronalchn

+0

您可以使用:via => [:get]使匹配只響應GET請求。對於正常的靜態頁面,匹配工作正常。 Rails的構建方式使得應用程序製造商不需要知道HTTP動詞 - 因此,對於大多數內容顯示頁面,rails使用match來減輕http的負擔。 –