首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将路由键ID从/threads/ID更改为/threads/uuid

将路由键ID从/threads/ID更改为/threads/uuid
EN

Stack Overflow用户
提问于 2011-07-10 08:28:19
回答 3查看 1.6K关注 0票数 0

我有一个线程模型,它有Thread (id,uuid,title...)

路径如下:

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

在日志中,我看到:

代码语言:javascript
复制
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插入,所以我应该看到:

代码语言:javascript
复制
  Parameters: {"uuid"=>"828b9a2ffc"}

如何在routes文件中实现这一点?

谢谢

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-07-10 09:01:38

也许我遗漏了一些明显的东西,但是使用这样的路由有什么问题:

代码语言:javascript
复制
match '/threads/:uuid' => 'threads#show', :via => :get

在你的routes.rb

票数 1
EN

Stack Overflow用户

发布于 2011-07-10 09:05:00

最简单的方法可能是:

代码语言:javascript
复制
match 'threads/:uuid' => 'threads#show', :as => :thread

这将使url的最后一部分作为params[:uuid]可用。如果你已经有了

代码语言:javascript
复制
resources :threads

定义,然后将它放在路由文件中的上面,它将覆盖已经定义的threads#show路径。

票数 1
EN

Stack Overflow用户

发布于 2011-07-10 09:05:44

在routes.rb中,你需要这样的东西:

代码语言:javascript
复制
get 'threads/:uuid', :action => "show", :as => "by_uuid"

这将创建一个thread_by_uuid_path(thread_object)帮助器方法,但如果您还具有:

代码语言:javascript
复制
resources :threads

..。仍然会有使用:id的标准show路由,并将与您上面定义的新路由冲突。您可以手动定义每个路由并删除resources :threads行,但我倾向于保留路由,并更改控制器方法,如下所示:

代码语言:javascript
复制
def show
  @thread = Thread.find_by_uuid(params[:id]) || Thread.find(params[:id])
  ...
end

..。这样,即使您希望传递UUID,也仍然可以使用ID。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6638415

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档