tutorial registrationscontroller rails instalar example ejemplos devise ruby-on-rails-4 strong-parameters

registrationscontroller - ¿Cómo especificar devise_parameter_sanitizer para editar la acción?



rspec rails devise (4)

Para Devise 4.1+

class ApplicationController < ActionController::Base before_action :configure_permitted_parameters, if: :devise_controller? protected def configure_permitted_parameters devise_parameter_sanitizer.permit(:sign_up, keys: [:first_name, :last_name, :email]) devise_parameter_sanitizer.permit(:account_update, keys: [:first_name, :last_name, :phone, :email, bank_attributes: [:bank_name, :bank_account]]) end end

El método .for está en desuso, ahora usamos .permit

El primer arg es el nombre de la acción. :sign_up es para crear recursos nuevos de Devise (como usuarios), y :account_update es para editar / actualizar el recurso.

El segundo arg,: :keys contiene una matriz de los parámetros que permite.

Si desea nested_attributes , hay un ejemplo en :account_update , coloca una matriz por separado con la clave siendo <object>_attributes .

He agregado Devise a mi aplicación Rails 4 y he agregado correctamente mi nombre de usuario, etc. a mi modelo de Usuario. Además, puedo almacenar esos campos usando lazy way ™, es decir,

class ApplicationController < ActionController::Base before_filter :configure_permitted_parameters, if: :devise_controller? protected def configure_permitted_parameters devise_parameter_sanitizer.for(:sign_up) { |u| u.permit(:email, :password, :password_confirmation, :firstname, :middlename, :lastname) } end end

Sin embargo, lo intenté

def configure_permitted_parameters devise_parameter_sanitizer.for(:sign_up) { |u| u.permit(:email, :password, :password_confirmation, :firstname, :middlename, :lastname) } devise_parameter_sanitizer.for(:edit) { |u| u.permit(:email, :password, :password_confirmation, :firstname, :middlename, :lastname) } end

pero eso no funcionó del todo como se esperaba (el nombre de usuario no se almacena cuando la acción de edición lo invoca). ¿Hay algo más que deba hacer para que funcione? ¡Gracias!


@conciliator tiene razón acerca de la palabra mágica es: account_update pero aquí está el enlace a la documentación que aludió a http://rubydoc.info/github/plataformatec/devise/ Busque ''devise_parameter_sanitizer'' y verá lo siguiente:

Solo hay tres acciones en Devise que permiten que cualquier conjunto de parámetros se transmita al modelo, por lo que requieren desinfección. Sus nombres y los parámetros permitidos por defecto son:

sign_in (Devise::SessionsController#new) - Permits only the authentication keys (like email) sign_up (Devise::RegistrationsController#create) - Permits authentication keys plus password and password_confirmation account_update (Devise::RegistrationsController#update) - Permits authentication keys plus password, password_confirmation and current_password


Una vez más, era cuestión de leer el manual ...

La palabra mágica es :account_update y así la versión de trabajo se convierte

def configure_permitted_parameters devise_parameter_sanitizer.for(:sign_up) { |u| u.permit(:email, :password, :password_confirmation, :firstname, :middlename, :lastname, :nickname) } devise_parameter_sanitizer.for(:account_update) { |u| u.permit(:email, :password, :password_confirmation, :current_password, :firstname, :middlename, :lastname, :nickname) } end

Tenga en cuenta que si está en el negocio de iniciar :sign_in utilizando parámetros no estándar, la palabra que está buscando es :sign_in (como se esperaba).


def configure_permitted_parameters devise_parameter_sanitizer.for(:account_update) { |u| u.permit(:email, :password, :password_confirmation, :current_password, :firstname, :middlename, :lastname, :nickname) } end