新学 Rails,正在实现一个博客。之前一直默认 post 的 id 作为其 url,现在欲实现自定义 url。
先在 post 表里增加 slug 字段,后在 post model 里增加以下代码:
def self.find(slug)
find_by_slug(slug)
end
def to_param
slug
end
现在新建的 post 能实现 CRUD,而之前没有 slug 的 post 不能 CRUD。
想到的思路是如果通过 slug 找不到 post 再通过 id 寻找。求大家指导,谢谢!
Update: 最终的方法是
def self.find(slug)
slug.to_i == 0 ? find_by_slug(slug) : super
end
def to_param
slug ? slug : id
end
再次谢谢大家的回复!
可以考虑使用重写 Post 的 to_param 方法
def to_param
"#{id}-#{slug}"
end
这样显示的及满足了自定义 url 的需求,其余的逻辑代码基本也不需要变动。
Post.find(params[:id])
这样的方法对于有 slug 和没有 slug 的 Post 都有效。可参考:https://gist.github.com/agnellvj/1209733
def to_param
slug ? slug : id
end
另外还得加
def self.find(slug)
slug.to_i == 0 ? find_by_slug(slug) : super
end
@post = Post.find_by_slug(params[:id]) || Post.find(params[:id])