2011-06-21 30 views
1

漂亮的網址,我想做些什麼來這個效果,我相信:使用的routes.rb

map.connect 'show/:company_name/:id', 
      :controller => 'companies', 
      :action  => 'show' 

基本上,每一個show動作被調用的時候,我想它採取COMPANY_NAME PARAM和把它放到url中(顯示/:company_name /:id)

但是,它似乎我使用舊的(rails 2.x路由api),並且不能使用map.connect而不會出現錯誤。我該如何升級?

有沒有辦法用「匹配」來做到這一點?

謝謝!

===================

這是我看到的錯誤,當我嘗試使用map.connect:

undefined local variable or method `map' for #<ActionDispatch::Routing::Mapper:0x103757458> 

回答

0

如果我很理解你的目標,試試

match 'companies/show/:company_name/:id' => 'companies#show' 
+0

謝謝!由於某種原因,沒有這樣做。它仍然顯示'show /:id'... hm – mtay

+0

是的,Rails 3對路由做了很多改變。 「地圖」是不必要的。看看http://edgeguides.rubyonrails.org/3_0_release_notes.html#action-dispatch,http://rizwanreza.com/2009/12/20/revamped-routes-in-rails-3和http:/ /www.engineyard.com/blog/2010/the-lowdown-on-routes-in-rails-3/ – bioneuralnet

4

我覺得你的路由在第一行缺少一個「/」符號。 試試這個:

match '/show/:company_name/:id' => 'companies#show' 

你可以用命令rake routes檢查你的路由路徑。

-

此外,show動作是Rails中默認的RESTful方法。我建議你改變一個相同的詞,併爲未來或其他情況保留「顯示」行動。

在Rails約定中,您可以使用show動作編寫resources :companies,路徑將爲/companies/:id

一些調整,在app /模型/ company.rb

def to_param 
    self.name 
end 

所以你的URL看起來像http://yourdoamin.com/companies/37signals

在應用程序/控制器/ companies_controller.rb

@company = Company.find_by_name(params[:id])