0

我使用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
 }

我不知道这是否是一个正确的方法?

4

0 回答 0