我有一个线程模型,它有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进行interpruted,所以我应该看到:
Parameters: {"uuid"=>"828b9a2ffc"}
如何在路线文件中实现?
由于
答案 0 :(得分:1)
也许我错过了一些显而易见的东西,但使用如下路线有什么问题:
match '/threads/:uuid' => 'threads#show', :via => :get
在routes.rb
?
答案 1 :(得分:1)
最简单的方法可能是:
match 'threads/:uuid' => 'threads#show', :as => :thread
这会使网址的最后一部分显示为params[:uuid]
。如果您已经
resources :threads
然后将定义为将其放在路径文件中,并覆盖已定义的threads#show
路径。
答案 2 :(得分:0)
在routes.rb中你需要这样的东西:
get 'threads/:uuid', :action => "show", :as => "by_uuid"
这将创建一个thread_by_uuid_path(thread_object)
辅助方法,但如果您还有:
resources :threads
...仍然会有使用show
的标准:id
路线,并且会与您在上面定义的新路线发生冲突。您可以手动定义每个路由并删除resources :threads
行,但我倾向于单独保留路由并更改控制器方法,如下所示:
def show
@thread = Thread.find_by_uuid(params[:id]) || Thread.find(params[:id])
...
end
...这样即使您希望传递UUID,仍然可以使用ID。