2012-09-07 85 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的负担。 –