update tutorial registrationscontroller rails gema fields ejemplos custom ruby-on-rails attributes devise custom-attributes

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.