ruby on rails - not - Rieles 5, Método indefinido `para ''para#<Diseñar en línea devise_parameter_sanitizer.for
devise rails ejemplos (5)
No olvide
devise_parameter_sanitizer.permit(:account_update, keys: [:username])
Estoy trabajando con Rails 5
Agregué un nuevo nombre de usuario de campo en el modelo Usuario.
class Users::RegistrationsController < Devise::RegistrationsController
before_action :configure_permitted_parameters
protected
def configure_permitted_parameters
devise_parameter_sanitizer.for(:sign_up).push(:username)
end
end
Durante el registro se muestra error: método indefinido `para ''para # ¿Quiso decir? tenedor
Rastro:
NoMethodError (método indefinido `para ''para # ¿Quiso decir? Fork):
app/controllers/users/registrations_controller.rb:7:in `configure_permitted_parameters''
Rendering /usr/local/rvm/gems/ruby-2.3.0/gems/actionpack-5.0.0.rc1/lib/action_dispatch/middleware/templates/rescues/diagnostics.html.erb within rescues/layout
Rendering /usr/local/rvm/gems/ruby-2.3.0/gems/actionpack-5.0.0.rc1/lib/action_dispatch/middleware/templates/rescues/_source.html.erb
Rendered /usr/local/rvm/gems/ruby-2.3.0/gems/actionpack-5.0.0.rc1/lib/action_dispatch/middleware/templates/rescues/_source.html.erb (5.0ms)
Rendering /usr/local/rvm/gems/ruby-2.3.0/gems/actionpack-5.0.0.rc1/lib/action_dispatch/middleware/templates/rescues/_trace.html.erb
Rendered /usr/local/rvm/gems/ruby-2.3.0/gems/actionpack-5.0.0.rc1/lib/action_dispatch/middleware/templates/rescues/_trace.html.erb (2.9ms)
Rendering /usr/local/rvm/gems/ruby-2.3.0/gems/actionpack-5.0.0.rc1/lib/action_dispatch/middleware/templates/rescues/_request_and_response.html.erb
Rendered /usr/local/rvm/gems/ruby-2.3.0/gems/actionpack-5.0.0.rc1/lib/action_dispatch/middleware/templates/rescues/_request_and_response.html.erb (1.2ms)
Rendered /usr/local/rvm/gems/ruby-2.3.0/gems/actionpack-5.0.0.rc1/lib/action_dispatch/middleware/templates/rescues/diagnostics.html.erb within rescues/layout (118.1ms)
¿Quien puede ayudar? ¿Cómo resolver este problema?
Si solo cambia el
.permit
a
.permit
también funciona.
Por ejemplo:
devise_parameter_sanitizer.permit(:sign_up) { |u| u.permit({ roles: [] }, :email, :password, :password_confirmation, :username) }
Funciona tanto en Rails 4.2.x como en Rails 5.0.x
According to the documentation:
La API de sanitizador de parámetros ha cambiado para Devise 4
class ApplicationController < ActionController::Base
before_action :configure_permitted_parameters, if: :devise_controller?
protected
def configure_permitted_parameters
devise_parameter_sanitizer.permit(:sign_up, keys: [:username])
end
end
Creo que se perdió la actualización de cuenta en el método configure_permitted_parameters de su controlador, debe seguir el patrón de diseño. Devise tiene una página de actualización de cuenta. Puede encontrar esto en views / devise / registrations / edit.html.erb, y su código tampoco funcionará en la página de inicio de sesión, aquí especificó la página de inicio de sesión
Para actualizar su tabla de usuario, en el momento en que envíe una actualización en sus usuarios / edición, o si está enviando un nombre de usuario en la página de registro, debe seguir este patrón de diseño, para actualizar la tabla de usuario de la base de datos. Incluso si agregó una nueva columna a la tabla de usuario, deberá agregarla al método configure_permitted_parameters. En su caso, es nombre de usuario, pero también perdió la actualización de cuenta. Básicamente está diciendo que desea actualizar el nombre de usuario o agregar la cadena al campo de nombre de usuario sin seguir el patrón de diseño. Cualquier campo que agregue a la tabla Usuario debe seguir este patrón de Diseño. También puede especificar qué página puede actualizar este nombre de usuario. En mi ejemplo a continuación, estoy usando la página de actualización de diseño. Entonces, como dije, incluso si agregó un nombre de campo personalizado a la tabla Usuarios, debe seguir este patrón. Si tiene otra página donde necesita agregar un nombre de usuario, simplemente haría lo mismo.
class ApplicationController < ActionController::Base
before_action :configure_permitted_parameters, if: :devise_controller?
protected
def configure_permitted_parameters
devise_parameter_sanitizer.permit(:sign_up, keys: [:username])
devise_parameter_sanitizer.permit(:account_update, keys: [:username])
end
end
A continuación, asegúrese de que en su user.rb haya validado el nombre de usuario en su modelo de Usuario.
class User < ApplicationRecord
devise :database_authenticatable, :registerable,
:recoverable, :rememberable, :validatable
validates :username, presence: true
end
class ApplicationController < ActionController::Base
before_action :configure_permitted_paramters, if: :devise_controller?
protected
def configure_permitted_paramters
devise_parameter_sanitizer.permit(:sign_up, keys: [:fullname])
devise_parameter_sanitizer.permit(:account_update, keys: [:fullname,
:phone_number, :description, :email, :password])
end
end