Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Adding name attribute to `User` in Devise

Tags:

I'm trying to add a name attribute to the User model provided by Devise. I added a "name" column to my database, and changed the sign up view so that it asks for the user's name:

<h2>Sign up</h2>  <%= form_for(resource, :as => resource_name, :url => registration_path(resource_name)) do |f| %>   <%= devise_error_messages! %>    <p><%= f.label :name %><br />   <%= f.text_field :name %></p>    <p><%= f.label :email %><br />   <%= f.email_field :email %></p>    <p><%= f.label :password %><br />   <%= f.password_field :password %></p>    <p><%= f.label :password_confirmation %><br />   <%= f.password_field :password_confirmation %></p>    <p><%= f.submit "Sign up" %></p> <% end %>  <%= render :partial => "devise/shared/links" %> 

It lets me log in, but when I check the database after doing so, name: nil. Do I have to add something to Devise's User controller or something? Thanks!

like image 949
steffi2392 Avatar asked Aug 16 '11 22:08

steffi2392


2 Answers

Rails 3

in your user model locate;

 attr_accessible :email, :password, :password_confirmation, :remember_me 

and add :name on the end

like image 101
John Beynon Avatar answered Sep 18 '22 05:09

John Beynon


Rails 5 (in fact devise 4)

Tested for: rails 5.1.0 (devise 4.2.1)

There is no need to work with devise controllers.

Just add the following to your application_controller.rb:

before_action :configure_permitted_parameters, if:  :devise_controller?   protected    def configure_permitted_parameters      devise_parameter_sanitizer.permit(:sign_up, keys: [:name])    end 

devise_parameter_sanitizer.for no longer works with Rails 5 (to be more correct, it is not supported in devise 4, which is the expected devise version in a Rails 5 context): use devise_parameter_sanitizer.permit to avoid undefined method 'for' for #<Devise::ParameterSanitizer error

like image 45
Varus Septimus Avatar answered Sep 19 '22 05:09

Varus Septimus