top of page

How to make friendly looking url using “friendly_id” gem in Ruby On Rails?

  • Writer: Mischelle L
    Mischelle L
  • Feb 16, 2018
  • 2 min read

FreindlyId gem is used to make friendly looking URLs i.e it lets us replace id’s in the URL with the string. It also prevents hacking of the web-page since the id gets hidden by the slug.Before friendly_id:

📷

After friendly_id :

📷

Here are the simple steps to follow:

Step 1: Add gem “friendly_id” to the Gemfile and run “bundle install” on terminal.

A] On an existing application :

Step 2: Run “rails g migration AddSlugToJobs”.

In this case, “slug” is the column name which is adding into existing “jobs” table.

Slug : Slug is the part of the URL. It is the slug which makes the URL user friendly.

Slug rules states that the string in the URL is separated by dash (-). Its rule also states that the letters in the URL are in lowercase.

📷

Step 3: Add the following code to the migration file :

📷

In my application,I have migration file “20180109135747_add_slug_to_jobs.rb” in “db/migrate/20180109135747_add_slug_to_jobs.rb”.In this step I am adding a column name “slug” to the existing table “jobs” and indexing it. In your case, you can add the code to your migration file and replace “:jobs” with your table name.

Step 4: Run “rake db:migrate

Step 5: Add the following code to the model :

📷

In my case, I have added the code in “job.rb” file which is in “app/models/job.rb”. In your case, add the code in your model’s file. In this step, I am extending “FriendlyId” module and using “friendly_id” method with the column name to tell rails which column to be used as a slug.

Step 6: Edit the show action of the controller:

📷

In my application, I have controller “jobs_controller.rb” in app/controllers/jobs_controller.rb. In your case add the following code to the show action of your controller.

Now the friendly_id will be applied to the new records which you create but in order to add friendly_id to the previous records which was created before adding friendly_id gem, follow the next step.

Step 7: run “rails c” enter and run :

Job.find_each(&:save)

Now your application is ready with a functionality of friendly_id. When you will create new record, it’s id in the URL will gets replaced with the slug. In my case , here is my output.

📷

B] On a new project :

Step 2: Run  “rails generate controller Posts index new show destroy ”

Run  “rails generate model Post title:string slug:string body:text ”

Step 3: Add the following line to the migration file :

add_index :posts, :slug, unique: true

📷

In my case, I have added the line in “20180130104525_create_posts.rb” file which is in “db/migrate/20180130104525_create_posts.rb”. Basically, I am adding the index to the “slug” column. In your case add this line in your file in “db/” and replace “:posts” with your table name.

Step 4: Run “rake db:migrate”

Step 5: Add the following code to the model

📷

In my case, I have added the code in “post.rb” file which is in “app/models/post.rb”. In your case add the code in your model’s file. In this step, I am extending “FriendlyId” module and using “friendly_id” method with the column name to tell rails which column to be used as a slug.

Step 6: Edit the show action in the controller.

📷

In my case, I have edited the show action in “post_controller.rb” which is in “app/controllers/post_controller.rb”. In your case edit the show action in your controller.

Now your newly created application is ready with the functionality of friendly_id.


Source: http://www.cryptextechnologies.com/blogs/how-to-make-friendly-url-using-friendly_id-gem

 
 
 

Recent Posts

See All

Comments


© 2023 by Walkaway. Proudly created with Wix.com

  • Facebook Black Round
  • Google+ - Black Circle
  • Twitter Black Round
bottom of page