Archive | Postgresql RSS for this section

Creating User and Admin Model using Devise Rails 4.0

In this tutorial I will show you how to install Devise. I decided to make this tutorial because it is hard to find a good resource for installing Devise on Rails 4.0. This tutorial will NOT teach you the basics of Ruby on Rails. It is intended to help those who have a basic understanding of Ruby on Rails.

If you would like a good place to start learning Ruby on Rails, read and complete by Michael Hartl

Other good resources are:
Devise Github page

In this tutorial I will be using the following gems

  • Rails 4.0
  • Devise 3.2
  • PostgresSQL 9.1

Using PostgreSQL is optional. If you would like to use it then you can follow the railscast to learn how to set it up.

This tutorial will show you how to create two models within devise. We will create a User and Admin model. I will also show you how set up a username for the sign in page.

Installing Devise

First we will install Devise.

$ gem install devise

This will install devise. After that we need to add devise into your Gemfile. This can be done by typing

$ gem 'devise'

within your Gemfile. Your Gemfile is within your application’s root folder. Next run the generator by using the command

$ rails generate devise:install

Generating a User Model

Next you should create a model called user.

$ rails generate devise user

Rails will create a user model and configure it with Devise modules. It will also create a migration file located in “db/migrate/devise_create_users.rb”. Run the command

$ rake db:migrate

When you run db:migrate, rails will create a table called users. It will display

==  DeviseCreateUsers: migrating ==============================================
-- create_table(:users)
-> 0.0071s
-- add_index(:users, :email, {:unique=>true})
-> 0.0009s
-- add_index(:users, :reset_password_token, {:unique=>true})
-> 0.0012s
==  DeviseCreateUsers: migrated (0.0101s) =====================================

Now the the model has been successfully generated. You can start the rails server by typing

$ rails server


$ rails s

To see what the site looks like you can go to http://localhost:3000/ or in your browser. You should see the rails home page when you open your browser.

You can see the devise generated sign-up and sign-in forms through these addresses.

You can add

<% if user_signed_in? %>

to the template. This will help to let us know whether devise is working or not. We can also add the link paths. This will allow us to get working links within our page.


will allow you to login and it will create a new session until you logout.


will allow us to change our password and delete our account.


will allow you to logout and it will destroy your current session.

Here is part of my header file which can be found in “app/views/layouts/_header.html.erb”

<ul class="nav pull-right">
  <li><%= link_to "Home",       root_path %></li>
  <li><%= link_to "Help",         help_path %></li>
  <% if user_signed_in? %>
    <li id="fat-menu" class="dropdown">
      <a href="#" class="dropdown-toggle" data-toggle="dropdown">
        Account <b class="caret"></b>
      <ul class="dropdown-menu">
        <li><%= link_to "Profile", edit_user_registration_path %></li>
        <li><%= link_to "Settings", '#' %></li>
        <li class="divider"></li>
          <%= link_to "Logout", destroy_user_session_path, :method => :delete %>
    <li> <%= link_to "Logout", destroy_user_session_path, :method => :delete %></li>
  <% else %>
    <li><%= link_to "Sign in", new_user_session_path %></li>
  <% end %>

If a user is signed in; show a link to users, profile, settings, and logout. Otherwise show the link to sign in.

For the home page of my app I include the link to sign up. The link path to sign up is


My example can be found in “app/views/static_pages/home.html.erb”

<%= link_to "Sign up now!", new_user_registration_path, class: "btn btn-large btn-primary" %>

Generating an Admin Model

Next we will generate the admin model.

$ rails generate devise Admin

Then you should migrate the database by running

$ rake db:migrate

You should see something like this:

==  DeviseCreateAdmins: migrating =============================================
-- create_table(:admins)
-> 0.1063s
-- add_index(:admins, :email, {:unique=>true})
-> 0.0666s
-- add_index(:admins, :reset_password_token, {:unique=>true})
-> 0.0446s
==  DeviseCreateAdmins: migrated (0.2180s) ====================================

The generated admin model can be found here:


We also will generate the views for both of the models.

$ rails generate devise:views

You can see the views are generated for devise in the devise folder. “app/views/devise”

I have made a couple other tutorials which will be posted on this blog, or they can be found here: