Styling the registration and sing in forms
At this point, the registration form does not look pretty, so let's fix it.
But the location of the view associated to it is not clear. However, there is a clue. When Rails starts with rails server
, we see the following logs:
$ rgdemo rails server
=> Booting WEBrick
=> Rails 4.2.4 application starting in development on http://localhost:3000
=> Run `rails server -h` for more startup options
=> Ctrl-C to shutdown server
[2016-02-13 14:16:58] INFO WEBrick 1.3.1
[2016-02-13 14:16:58] INFO ruby 2.2.2 (2015-04-13) [x86_64-darwin14]
[2016-02-13 14:16:58] INFO WEBrick::HTTPServer#start: pid=18475 port=3000
Started GET "/users/sign_up" for ::1 at 2016-02-13 14:17:10 +0200
ActiveRecord::SchemaMigration Load (0.1ms) SELECT "schema_migrations".* FROM "schema_migrations"
Processing by Devise::RegistrationsController#new as HTML
Rendered /Users/doina/.rvm/rubies/ruby-2.2.2/lib/ruby/gems/2.2.0/gems/devise-3.5.2/app/views/devise/shared/_links.html.erb (1.7ms)
Rendered /Users/doina/.rvm/rubies/ruby-2.2.2/lib/ruby/gems/2.2.0/gems/devise-3.5.2/app/views/devise/registrations/new.html.erb within layouts/application (42.1ms)
Completed 200 OK in 492ms (Views: 470.2ms | ActiveRecord: 0.4ms)
Note the rendering of app/views/devise/registrations/new.html.erb
above.
Devise (the library that we use for authentication) renders two views (.html.erb
files) from somewhere else! If we look at the Devise documentation, we see that we can ask Devise to generate those views.
Stop the server (using Ctrl+C
) and run the following in the terminal:
$ rails generate devise:views
Now look in your Sublime Text tree on the left, you see a lot of new files in the app/views/devise
directory :
app/views/devise
├── confirmations
│ └── new.html.erb
├── mailer
│ ├── confirmation_instructions.html.erb
│ ├── reset_password_instructions.html.erb
│ └── unlock_instructions.html.erb
├── passwords
│ ├── edit.html.erb
│ └── new.html.erb
├── registrations
│ ├── edit.html.erb
│ └── new.html.erb
├── sessions
│ └── new.html.erb
├── shared
│ └── _links.html.erb
└── unlocks
└── new.html.erb
7 directories, 11 files
Let's open the file app/views/devise/registrations/new.html.erb
. We see the following there:
<h2>Sign up</h2>
<%= form_for(resource, as: resource_name, url: registration_path(resource_name)) do |f| %>
<%= devise_error_messages! %>
<div class="field">
<%= f.label :email %><br />
<%= f.email_field :email, autofocus: true %>
</div>
<div class="field">
<%= f.label :password %>
<% if @minimum_password_length %>
<em>(<%= @minimum_password_length %> characters minimum)</em>
<% end %><br />
<%= f.password_field :password, autocomplete: "off" %>
</div>
<div class="field">
<%= f.label :password_confirmation %><br />
<%= f.password_field :password_confirmation, autocomplete: "off" %>
</div>
<div class="actions">
<%= f.submit "Sign up" %>
</div>
<% end %>
<%= render "devise/shared/links" %>
Oh! We've seen the form_for
before! And we know how to style these.
Change the form_for
helper to bootstrap_form_for
and go wild! Also, remove all label
tags, otherwise, you'll have the duplicated labels.
Now you can update the
app/views/devise/session/new.html.erb
form as well.