2011-07-10 39 views
0

我有一個線程模型,有螺紋(ID,UUID,標題......)改變路線密鑰ID,從/線程/身份證/線程/ UUID

這裏的路徑是:

當控制器重定向:http://localhost:3000/threads/828b9a2ffc

在日誌中我後來看到:

Started GET "/threads/828b9a2ffc" for 127.0.0.1 at Sat Jul 09 17:24:02 -0700 2011 
    Processing by ThreadsController#show as HTML 
    Parameters: {"id"=>"828b9a2ffc"} 

這裏的問題是,我不想828b9a2ffc是ID,我希望它interpruted作爲參數的UUID ,所以我守ld請參閱:

Parameters: {"uuid"=>"828b9a2ffc"} 

這怎麼可能在路由文件中成爲可能?

感謝

回答

1

也許我失去了一些東西很明顯,但有什麼不對使用類似的路線:

match '/threads/:uuid' => 'threads#show', :via => :get 

routes.rb

1

最簡單的方法很可能是:

match 'threads/:uuid' => 'threads#show', :as => :thread 

這將使可作爲params[:uuid] URL的最後一部分。如果你已經有那麼

resources :threads 

定義只是把它上面,在你的路由文件,它會覆蓋已經定義了threads#show路徑。

0

在routes.rb中你需要的東西是這樣的:

get 'threads/:uuid', :action => "show", :as => "by_uuid" 

這將創建一個thread_by_uuid_path(thread_object) helper方法,但如果你也有:

resources :threads 

...仍然會有標準show路線,它使用:id,並且與上面定義的新路線衝突。您可以手動定義每條路線的並刪除了resources :threads線,但我會傾向於獨自離開的路線,改變控制器的方法是這樣的:

def show 
    @thread = Thread.find_by_uuid(params[:id]) || Thread.find(params[:id]) 
    ... 
end 

...這樣的ID仍然可以使用,甚至儘管你期望UUID被傳遞。