我使用stringex来实现更友好的 url,就像在 stackoverflow 中一样,现在我启用我的 url,如下所示:
http://localhost:8000/questions/12/i-want-to-display-the-url-like-stackoverflow
当然,我发现SO步骤更进一步,进入时
http://stackoverflow.com/questions/30683457
在url地址栏中,SO会重定向到相应的问题
http://stackoverflow.com/questions/30683457/why-i-got-the-error-couldnt-find-article-with-id-ni-hao-wo-zhen-de-henhaoma-w
,
但在我的应用程序中,我曾经find_by_slug!()
获取记录,因此,输入http://localhost:8000/questions/12
时会抛出错误:
ActiveRecord::RecordNotFound in QuestionsController#show
Couldn't find Question with slug = 12
我应该如何同时启用这两种网址?是否可以为其添加路由规则,如果可以,怎么做?
著名的
特别是,因为我的 Rails 应用程序基于social-stream engine,其中包括一个插件inherit-resources,并且inherited-resources
有一个默认方法find_by_id()
,所以我使用覆盖它find_by_slug()
更新
在阅读了一些有关Rails Routing的手册后,我启用http://ip:port/questions/:id
了,例如,当我输入时http://localhost:8000/questions/12
它会重定向到http://localhost:8000/questions/12/i-want-to-display-the-url-like-stackoverflow
,我的解决方案如下,并在其中附加一条规则routes.rb
match 'questions/:id' => redirect { |params, req|
id = params[:id]
slug = Question.find_by_id(params[:id].to_i).slug
'/questions/' + id + '/' + slug
}
我不知道这是否是一个正确的方法?