2011-07-10 28 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被传递。