面对Rails中Slug的一些奇怪问题
Loading development environment (Rails 3.2.13)
2.1.2 :001 > Tutorial.last
Tutorial Load (0.7ms) SELECT "tutorials".* FROM "tutorials"
ORDER BY "tutorials"."id" DESC LIMIT 1
=> #<Tutorial id: 3, title: "Populating the Database’s with seeds.rb",
state: "Publish", content_introduction: "<p>Demo Data</p>\r\n",
slug: "populating-the-database-s-with-seeds-rb">
2.1.2 :002 > Tutorial.last.slug
Tutorial Load (0.6ms) SELECT "tutorials".* FROM "tutorials"
ORDER BY "tutorials"."id" DESC LIMIT 1
=> "populating-the-database’s-with-seeds.rb"
在数据库中,它通过替换特殊字符显示“ - ”,但在访问时会显示它。
模型
def slug
title.strip.downcase.gsub(/[:,'"%^&*+=<>.`~]/,"").gsub("’","").gsub(" ", " ").gsub(" ", "-")
end
def to_param
"#{slug}".parameterize
end
extend FriendlyId
friendly_id :title, use: [ :slugged, :history ]
因此,使用slug访问页面时会出错。请看一下并提出一些建议。
答案 0 :(得分:0)
您在Tutorial.last
中看到slug的值与Tutorial.last.slug
中的slug值之间存在差异
Tutorial.last
从表中获取最后一条记录,该记录为您提供了保存在数据库中的slug
,但Tutorial.last.slug
正在调用模型中定义的slug
方法, Tutorial.last
是一个对象,使用该对象调用slug
方法
def slug
title.strip.downcase.gsub(/[:,'"%^&*+=<>.`~]/,"").gsub("’","").gsub(" ", " ").gsub(" ", "-")
end
所以注释掉上面的方法,你会在两种情况下得到相同的结果!
看起来您在模型中定义的slug
方法正在操纵title
字段以获取slug值,但据我所知{gem}本身friendly_id
处理它,所以只要注意slug方法。它会解决你的问题。希望这有帮助!