to_param修改show页面URL

作者:周星 发布:2017-10-07

       一般来说,show路由生成的 url 都是 /XX/:id 类型,但是这种 URL 看起来很不“见名知意”,以 ID 作为标识符也会让用户迷惑,大家看一下我的博客文章的 show 页面 url,已经改成了 blogs/url_name,这是怎么做到的呢?

要达到这种需求可以有多种方法,这里只介绍一种最简便的:to_param

Rails 的 Action Pack 针对对象使用 to_param 来构造页面 URL,我们看这个方法默认会返回什么

irb(main):003:0* b = Blog.first
=> #<Blog id: 10, title: "写在最前面:星's blog", content: "<p>\r\n\t<span style=\"font-size:14px;\">&nbsp; &nbsp; 博...", user_id: 1, tag: nil, created_at: "2014-03-08 04:31:32", updated_at: "2014-06-27 16:04:37", blog_category_id: 6, view_total: 119, weight: 100, publish_status: true, seo_keyword: "访者必看", url_name: "say_to_all_visitors">
irb(main):004:0> b.to_param
=> "10"

可以看出 to_param 默认返回的是一个字符串,值为这个对象的 ID,如果这个对象不存在,它会返回 nil

根据上面的介绍,我们的开发方案就很清楚了:首先我在 blogs 表里增加了一个字段,字段名就是 url_name,并在数据库层和 model 层做了限制,url_name 必须唯一;然后在 app/model/blog.rb 里定义 to_param 方法

class Blog< ActiveRecord::Base
  def to_param
    url_name
  end
end

然后再把 controller 里的 find 方法改成 find_by_url_name就可以了。

支付宝扫码赞助博主


评论(0)