2011-08-16 48 views
18

Estoy tratando de agregar un atributo de nombre al modelo de usuario proporcionado por Devise. He añadido una columna "nombre" a mi base de datos, y ha cambiado el signo encima de la visión de manera que pide el nombre del usuario:Agregar atributo de nombre a `Usuario` en Devise

<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" %> 

Me permite entrar, pero al comprobar la base de datos después de hacerlo, name: nil . ¿Debo agregar algo al controlador User de Devise o algo así? ¡Gracias!

+1

¿No necesita también crear una migración que agregue "nombre" a la tabla de la base de datos para el usuario? –

Respuesta

17

en su modelo de usuario locate;

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

y añadir: nombrar en el extremo

+11

¿qué pasa con rails4? ya que no hay tal cosa attr_accessible –

+0

@namiheike No estoy seguro de cuál es la respuesta para los rieles 4 en este momento, pero una solución rápida sería agregar gem 'protected_attributes' a su gemfile. Luego puede usar attr_accessible – Jordan

+3

Vea aquí para Rails 4: https://github.com/plataformatec/devise#strong-parameters – AmitA

2

Sí. Añadir :name-attr_accessible en el Modelo de Usuario

6

para los carriles 4

uso como esto

protected 
def configure_permitted_parameters 
    devise_parameter_sanitizer.for(:sign_up) { |u| u.permit(:username, :email, :password, :password_confirmation, :remember_me) } 
    devise_parameter_sanitizer.for(:sign_in) { |u| u.permit(:login, :username, :email, :password, :remember_me) } 
    devise_parameter_sanitizer.for(:account_update) { |u| u.permit(:username, :email, :password, :password_confirmation, :current_password) } 
end 

Añadir campos adicionales al final.

+0

¿Dónde podría agregar esto? ¿Tengo que crear un user_controller? –

+1

'app/controllers/application_controller.rb' Ejemplo: https://github.com/mistergiri/ExamAwesomeIdeas/blob/master/app/controllers/application_controller.rb – Giri

7

añadir este código a application_controller.rb

before_action :configure_permitted_parameters, if: :devise_controller? 



protected 
def configure_permitted_parameters 
    devise_parameter_sanitizer.for(:sign_up) { |u| u.permit(:username, :email, :password, :password_confirmation, :remember_me) } 
    devise_parameter_sanitizer.for(:sign_in) { |u| u.permit(:login, :username, :email, :password, :remember_me) } 
    devise_parameter_sanitizer.for(:account_update) { |u| u.permit(:username, :email, :password, :password_confirmation, :current_password) } 
end 
1

escribir este código dentro de la clase ApplicationController ...

before_action :configure_permitted_parameters, if: :devise_controller? 

     protected 

     def configure_permitted_parameters 
     devise_parameter_sanitizer.for(:sign_up) << :name 
0

uncomment una parte del código generado:

class Users::RegistrationsController < Devise::RegistrationsController 
    before_filter :configure_sign_up_params, only: [:create] 

    protected 

    def configure_sign_up_params 
    devise_parameter_sanitizer.for(:sign_up) << :name 
    end 
end 
0
private 

    def sign_up_params 
    params.require(:user).permit(:name,:email,:gender,:age,:password,:password_confirmation) if params[:user].present? 
    end 

Añadir este en el controlador que se extiende controlador de registro por defecto del legado

2

para los carriles 5 (de hecho idear 4)

Probado para: carriles 5.1.0 (idear 4.2.1)

Hay no es necesario trabajar con los controladores de diseño.

Apenas añada lo siguiente a su 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 ya no funciona con los carriles 5 (para ser más correctos, no se admite en idear 4, que es la versión legado de esperar en un Rieles 5 contexto): use devise_parameter_sanitizer.permit para evitar undefined method 'for' for #<Devise::ParameterSanitizer error

Cuestiones relacionadas