我有一个线程模型,它有Thread (id,uuid,title...)
路径如下:
当控制器重定向时: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,我希望它在参数中作为uuid插入,所以我应该看到:
Parameters: {"uuid"=>"828b9a2ffc"}如何在routes文件中实现这一点?
谢谢
发布于 2011-07-10 09:01:38
也许我遗漏了一些明显的东西,但是使用这样的路由有什么问题:
match '/threads/:uuid' => 'threads#show', :via => :get在你的routes.rb中
发布于 2011-07-10 09:05:00
最简单的方法可能是:
match 'threads/:uuid' => 'threads#show', :as => :thread这将使url的最后一部分作为params[:uuid]可用。如果你已经有了
resources :threads定义,然后将它放在路由文件中的上面,它将覆盖已经定义的threads#show路径。
发布于 2011-07-10 09:05:44
在routes.rb中,你需要这样的东西:
get 'threads/:uuid', :action => "show", :as => "by_uuid"这将创建一个thread_by_uuid_path(thread_object)帮助器方法,但如果您还具有:
resources :threads..。仍然会有使用:id的标准show路由,并将与您上面定义的新路由冲突。您可以手动定义每个路由并删除resources :threads行,但我倾向于保留路由,并更改控制器方法,如下所示:
def show
@thread = Thread.find_by_uuid(params[:id]) || Thread.find(params[:id])
...
end..。这样,即使您希望传递UUID,也仍然可以使用ID。
https://stackoverflow.com/questions/6638415
复制相似问题