Rails里应用Friendly Id

Change Default URL

Sometimes, we want to change the displayed URL because url like /post/4/edit is not descriptive and then friendly_id come into play! Here is a simple guide for using friendly_id in your rails app.

Add Gem

First thing you need to do is to add friendly_id gem to you Gemfile. Just add gem 'friendly_id', '~> 5.1.0' to your Gemfile and run bundle install and restart your server.

Create Friendly Id Slugs

You need to create a table in your database. It's pretty easy to do.

If you want to use friendly id for a new resource, say User, run these commands:

rails generate scaffold user name:string slug:string:uniq
rake db:migrate

If you want to use friendly id for an existing resource, say Post, run these commands:

rails generate migration add_slug_to_posts slug:string:uniq
rake db:migrate

Edit Model

You may need to edit your corresponding model(like User or Post). Change :title in the code to meet your need.

class Post < ActiveRecord::Base
    validates(:title, :content, presence: true)
    extend FriendlyId
    friendly_id :title, use: :slugged
end

Edit Controller

To get things done, you also need to edit you corresponding controller. Use friendly.find instead of find and permit :slug.

class PostsController < ApplicationController
    private

    def post_params
        params.require(:post).permit(:title, :content, :category, :slug)
    end

    def find_post
        @post = Post.friendly.find(params[:id])
    end
end

One More Thing

If you use friendly id for your existing resource, you may also need to run this command in rails console Post.find_each(&:save). Then it should work.

Deploy to Heroku

If your app is deployed at heroku, these commands are also need:

heroku run rake db:migrate
heroku run rails c
Post.find_each(&:save)
exit

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏菩提树下的杨过

如何给已经有数据的DataTable动态增加一列并赋值

以前手写sql的时代,我们经常用DataTable,自从用Linq后,很少用DataTable这些原始的东东了,近日在开发中遇到一些特殊情况,用户要求临时在显示...

1839
来自专栏DOTNET

asp.net web api 版本控制

版本控制 版本控制的方法有很多,这里提供一种将Odata与普通web api版本控制机制统一的方法,但也可以单独控制,整合控制与单独控制主要的不同是:整合控制通...

3936
来自专栏布尔

基于Aspose.Pdf把pdf文件每一页转换为图片

如题,直接上代码片段             //1.选择pdf文件 var dialog = new OpenFileDialog();       ...

2129
来自专栏张善友的专栏

.NET 4.0 的Web Form和EF的例子 Employee Info Starter Kit (v4.0.0)

ASP.NET 4.0改进了许多不同的场景集(set of scenarios),如Webforms ,Dynamic Data以及基于AJAX的Web开发。此...

17510
来自专栏算法修养

CodeForces 667A Pouring Rain

A. Pouring Rain time limit per test 1 second memory limit per test 256 meg...

2595
来自专栏施炯的IoT开发专栏

Windows Mobile 6.5.3 Developer Tool Kit

    目前,微软正在花大量的人力物力财力做Windows Phone 7,而且据说以后会给出硬件平台配置需求,目前的Windows Mobile 6.x系列机...

1785
来自专栏我和未来有约会

(收藏)搭建.NET Framework 3.0开发环境 及SharePoint 2007/WSS 3环境

第一步:首先您必须安装.NET Framework 3.0,则可以下载其Redistributable Package Microsoft .NET Frame...

1826
来自专栏C#

将文本文件的内容存储在DataSet中的方法总结

    项目中比较多的会对文件进行操作,例如文件的上传下载,文件的压缩和解压等IO操作。在.NET项目中较多的会使用DataSet,DataTable进行...

1748
来自专栏算法修养

PAT 甲级 1078 Hashing

1078. Hashing (25) 时间限制 100 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 ...

2876
来自专栏技术之路

动态生成TreeView方法(一)

一般情况下生成TreeView我们用的是用递归不建议用递归数据量大了会慢, 小弟今天用SortedList集合实现一下没有技术含量,一看代码大家就会明白。个人也...

1796

扫码关注云+社区