简介
在我们的项目中如果不对url进行模糊处理,通常的url会像下面这样子:
http://localhost:3000/backend/groups/1/edit
http://localhost:3000/backend/groups/1/interfaces/1/edit
这直接暴露了数据库里有多少条记录.为了降低风险,我们需要借助friendly_id这个gem对url进行模糊处理.
处理的结果应该是下面这样:
http://localhost:3000/backend/groups/0f7094c6-ec6e-11e6-a542-7cd1c3f0bed9/edit
http://localhost:3000/backend/groups/0f7094c6-ec6e-11e6-a542-7cd1c3f0bed9/interfaces/48e86a4e-ec6e-11e6-a542-7cd1c3f0bed9/edit
实现过程
添加friendly_id这个gem
1 | #Gemfile |
按照官方教程进行初始化:
1 | rails g friendly_id |
先来实现编辑group的url模糊处理
1 | #先为groups表添加slug字段 |
然后修改group model
1 | #app/modles/group.rb |
然后controller中所有查询都通过friendly
1 | #app/controllers/backend/groups_controller.rb |
完成以上操作后即实现了http://localhost:3000/backend/groups/1/edit这个url的模糊处理.
查看http://localhost:3000/backend/groups的html你会发现 编辑 对应的href的值已经模糊处理,但是删除的href还是没处理的状态.这个时候修改groups/index.html.erb
1 | #app/views/backend/groups/index.html.erb |
处理interface
如果现在什么都不做,直接打开interface,你会发现interface的首页无法正常显示数据了.因为用于查询的group_id由数字变成了一长串的字符串.
接下来我们修复这个问题.
先按照修改group的方式修改interface使用friendly.因为group和interface有has_many关联,所以需要一些特殊处理!
1 | #先为interfaces添加groups的sid外键关联 |
然后修改set_attribute方法传入 params[:group_id]
1 | #app/models/intreface.rb |
这样处理后,新增interface的时候,就会把group的sid插入到interface的group_sid字段中.
其它
也可通过重写model的to_param方法模糊处理url,比如
1 | def to_param |
以上就是friendly_id的简单用法.如有不对的地方欢迎指正!