ruby-on-rails - español - devise rails tutorial
Parámetros fuertes con Rails y Devise (3)
Estoy usando la rama Rails 4.0 of idee junto con ruby 2.0.0p0 y Rails 4.0.0.beta1.
Este es el tipo de pregunta en la que estoy comprobando si lo estoy haciendo de la manera correcta, o si hay otras cosas que debería hacer. Estoy seguro de que muchas personas que se mudan a Rails 4.0 se enfrentan a los mismos problemas (después de buscar en Google por cosas similares).
He leído los siguientes enlaces:
- Diseñar y fuertes parámetros
- https://gist.github.com/kazpsp/3350730
- https://github.com/plataformatec/devise/tree/rails4#strong-parameters
Ahora, usando el diseño, creé un modelo de usuario, creé el siguiente controlador usando las ideas anteriores (y me aseguré de incluirlo en mi archivo de rutas). Mis parámetros adicionales son first_name y last_name.
class Users::RegistrationsController < Devise::RegistrationsController
def sign_up_params
params.require(:user).permit(:first_name, :last_name, :email, :password, :password_confirmation)
end
def account_update_params
params.require(:user).permit(:first_name, :last_name, :email, :password, :password_confirmation, :current_password)
end
private :sign_up_params
private :account_update_params
end
¿Hay algo más que deba hacer? ¿Es esta la mejor manera de hacer las cosas a partir de ahora (desde la caída de attr_accessor). Mis formularios parecen estar funcionando bien (tanto el nuevo como el actualizado). Los gists decían usar "resource_params" pero eso siempre daba el error de "Parámetros no permitidos" en el registro de mi servidor.
Para Rails 5, Devise 4 Usa esto:
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, :password, :password_confirmation])
end
end
Funciona muy bien con la adición de un módulo en config/initializers
con todos los parameters
como este
module DevisePermittedParameters
extend ActiveSupport::Concern
included do
before_filter :configure_permitted_parameters
end
protected
def configure_permitted_parameters
devise_parameter_sanitizer.for(:sign_up) { |u| u.permit(:first_name, :last_name, :email, :password, :password_confirmation) }
end
end
DeviseController.send :include, DevisePermittedParameters
Gracias por las últimas actualizaciones en la rama Rails4 de Devise, realmente no es necesario insertar ''resource_params''.
Creé una nueva aplicación Rails4 y seguí los pasos básicos de instalación de Devise y mi aplicación funciona correctamente, así que creo que lo has hecho bien.
Pero hay una esencia modificada que le da algunos detalles adicionales en términos de parámetros permitidos si necesita:
Fuente: https://gist.github.com/bluemont/e304e65e7e15d77d3cb9
# controllers/users/registrations_controller.rb
class Users::RegistrationsController < Devise::RegistrationsController
before_filter :configure_permitted_parameters
protected
# my custom fields are :name, :heard_how
def configure_permitted_parameters
devise_parameter_sanitizer.for(:sign_up) do |u|
u.permit(:name, :heard_how,
:email, :password, :password_confirmation)
end
devise_parameter_sanitizer.for(:account_update) do |u|
u.permit(:name,
:email, :password, :password_confirmation, :current_password)
end
end
end