在URL中的Rails slug – 使用Active Record Model Post的Title属性而不是ID
我一直在试图让我的Rails创buildurl来显示logging,通过使用他们的标题,而不是他们在URL中的ID,如:
/职位/ A-后约-火箭
在线教程后,我做了以下几点:
由于ID不再在URL中,所以我们必须稍微改变代码。
class Post < ActiveRecord::Base before_create :create_slug def to_param slug end def create_slug self.slug = self.title.parameterize end end
创buildpost时,标题的URL友好版本存储在数据库中的slug列中。
我们还必须更新查找使用slug列而不是使用ID查找logging。
class ProjectsController < ApplicationController def show @project = Project.find_by_slug!(params[:id]) end end
在这一点上,似乎工作,除了显示一个logging,因为find_by_slug! 还不存在。
我是一个极端的新手 – 我应该在哪里定义它?
find_by_foo不是你需要定义的东西。 只要您有一个名为“foo”的列,ActiveRecord就会为您提供帮助。 如果没有findlogging,像你一样添加一个感叹号将会引发exception,而不是在没有使用感叹号的情况下返回nil。
至于你的具体问题,你添加你的slu to邮政,但你想在项目上search。
这不一定是你的问题的直接答案,但你看过Stringex插件( http://github.com/rsl/stringex )? 这是自动为您的logging创buildslu </s>的好方法。
您可以在模型中添加如下所示的内容:
class Post < ActiveRecord::Base acts_as_url :title end
它会自动创build你的标题slu and并将其保存到slug列。
它创造slu way的方式也非常聪明。 例如,今天只有“10%off”的标题变成了“今天只有10%的折扣”。
很漂亮!
Stringex的gem本身很棒,但我不认为把它保存在数据库上是个好主意。 你需要记住的是,如果与slug相关的变化你需要更新你的slug列。 E一致。
最后,无论以何种forms,都是重复的信息。 我正是因为这个原因写了一篇文章。
http://blog.ereslibre.es/?p=343
我希望这个post有一些帮助。 我试图解释一切。