ruby on rails - tutorial - Agregando el atributo del nombre a `User` en Devise
gema devise (8)
Estoy tratando de agregar un atributo de nombre al modelo de usuario proporcionado por Devise. Agregué una columna de "nombre" a mi base de datos y cambié la vista de registro para que solicite el nombre del usuario:
<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 iniciar sesión, pero cuando reviso la base de datos después de hacerlo, name: nil
. ¿Tengo que agregar algo al controlador de User
de Devise o algo así? ¡Gracias!
Agregue 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
Para rieles 4
Usar asi
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.
Para rieles 5 (de hecho, dispositivo 4)
Probado para: rieles 5.1.0 (dispositivo 4.2.1)
No hay necesidad de trabajar con controladores de dispositivos.
Solo agrega lo siguiente a tu 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 Rails 5 (para ser más correcto, no es compatible con el dispositivo 4, que es la versión de devise_parameter_sanitizer.permit
esperada en un contexto de Rails 5): use devise_parameter_sanitizer.permit
para evitar el undefined method ''for'' for #<Devise::ParameterSanitizer
error
Escriba 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
Sí. Añadir :name
a attr_accessible
en User Model
descomentar algo 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
en su modelo de usuario localizar;
attr_accessible :email, :password, :password_confirmation, :remember_me
y agregar: nombre al final
private
def sign_up_params
params.require(:user).permit(:name,:email,:gender,:age,:password,:password_confirmation) if params[:user].present?
end
Agregue esto en el controlador que extiende el controlador de registro predeterminado del dispositivo.