为什么使用slug而不是主键的Friendly_ID gem?

时间:2014-09-25 16:24:17

标签: ruby-on-rails friendly-url friendly-id

安装Friendly_ID后我从rails收到错误,因为代码错误解释了输入,我不知道如何解决问题。为了使MVC框架能够理解url并相应地路由它,url需要符合以下模式:

localhost:3000/posts/[:id]

在上面,[id]表示Post模型类中找到的任何对象的主键。当Friendly_ID更改网址以符合以下模式时,误解就会生效:

localhost:3000/posts/[:slug]

更新后的网址显然更容易被用户阅读,但由于我的应用程序希望获得[:id],因此会针对网址“localhost:3000 / posts / testing”引发以下异常:

Rails exception screenshot


我曾假设Friendly_ID gem要么在内部处理路由问题,要么执行某种[:id]查找,要么通过某种url-masking来实现它的魔力。由于在这种情况下上述都不是真的,如何解决问题,允许pretty-urls提供与原始url模式相同的结果?

2 个答案:

答案 0 :(得分:1)

自gem version 5.0

以来,Finder覆盖被禁用

使用Post.friendly.find(params[:id])或降级,或使用查找器插件,请参阅project github page

答案 1 :(得分:0)

config.use :finders添加到您的config/initializers/friendly_id.rb

这就是我的样子:

FriendlyId.defaults do |config|
  config.use :reserved

  config.reserved_words = %w(new edit index session login logout users admin
    stylesheets assets javascripts images)

  config.use :finders
end