Parámetros fuertes: Devise 3.0.0 y Rails 4. “Parámetros no permitidos: nombre”

Actualmente estoy usando Rails 4 y Devise 3.0.0. He intentado agregar un campo personalizado de “Nombre” al formulario de registro y editar el formulario de registro. Cada vez que presento el formulario, surgen los siguientes errores:

Unpermitted parameters: name WARNING: Can't mass-assign protected attributes for User: email, password, password_confirmation. 

Entiendo que esto tiene algo que ver con la forma en que Rails 4 maneja los parámetros, pero no entiendo lo que se supone que debo hacer al respecto en este momento. He buscado y he visto que debo agregar algunas líneas a un modelo de usuario que involucra “params”.

Mi modelo de usuario se ve así:

 class User < ActiveRecord::Base devise :database_authenticatable, :registerable, #:recoverable, :rememberable, :trackable, :validatable attr_accessible :name, :password, :password_confirmation, :remember_me, :email end 

De acuerdo con ¿Cómo se usa attr_accessible en Rails 4? , Se supone que debo agregar el siguiente código a “El controlador”.

 class PeopleController < ApplicationController def create Person.create(person_params) end private def person_params params.require(:person).permit(:name, :age) end end 

¿Qué controlador? ¿Y es este código literal? Ya que estoy tratando con el Usuario, ¿tengo que usar User.create (user_params)? En lugar de Person.create (person_params)?

Debe agregar esto en el controlador donde ha escrito User.create (user_params). Estoy asumiendo que UsersController.

 class UsersController < ApplicationController def create User.create(user_params) end private def user_params #assumption: user params are coming in params[:user] params.require(:user).permit(:name, :age, :and_other_params_you_want_to_allow) end end 

Rails 4 ha movido el parámetro sanitización al controlador desde el modelo. Devise lo maneja para 3 acciones, sign_in, sign_up y account_update. Para sign_up, los parámetros permitidos son la authentication key (que es :email por defecto), password y password_confirmation .

Si desea agregar :name al modelo de User y usarlo para sign_up, cambie config.authentication_keys = [ :email ] a config.authentication_keys = [ :name ] en /config/initializers/devise.rb o, si desea para utilizar tanto :email como :name , agregue esto a ApplicationController

 class ApplicationController < ActionController::Base before_action :configure_permitted_parameters, if: :devise_controller? protected def configure_permitted_parameters devise_parameter_sanitizer.for(:sign_up) << :username end end 

También revise https://github.com/plataformatec/devise#strong-parameters

Sí, debes agregar una línea que es como:

 attr_accessible :name 

en su modelo para permitir el nombre asignado y si no funciona, intente esto ¿Cómo se usa attr_accessible en Rails 4?

Tengo un problema similar. Por lo tanto, para solucionarlo, creé un controlador de registro personalizado heredado del controlador DeviseRegistration. Verifique la documentación del dispositivo y defina el controlador como este.

 class RegistrationsController < Devise::RegistrationsController before_filter :update_sanitized_params, if: :devise_controller? def update_sanitized_params devise_parameter_sanitizer.for(:sign_up) {|u| u.permit(:name, :email, :)} end end 

Asegúrese de haber definido estas rutas para este controlador en config / route.rb

  devise_for :users, :controllers => {:registrations => "registrations" } , :path => '', :path_names => { :sign_in => 'login', :sign_out => 'logout' } 

Compruebe esta documentación de dispositivo para el parámetro fuerte.

Tuve problemas similares, esta fue mi solución:

 class ApplicationController < ActionController::Base before_filter :configure_permitted_parameters, if: :devise_controller? protected def configure_permitted_parameters devise_parameter_sanitizer.for(:account_update) { |u| u.permit!} end end