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 el 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)
¿Quién puede ayudar? ¿Cómo solucionar este problema?
ruby-on-rails
devise
ruby-on-rails-5
Dmitriy
fuente
fuente
Respuestas:
According to the documentation:
fuente
gem 'devise', '~> 3'
por mí.Si simplemente cambia
.for
a,.permit
también funciona. Por ejemplo:Funciona tanto en Rails 4.2.xy Rails 5.0.x
fuente
No olvides
devise_parameter_sanitizer.permit(:account_update, keys: [:username])
fuente
Creo que se perdió account_update 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 registro, aquí especificó la página de registro
Para actualizar su tabla de usuarios, en el momento en que envía una actualización en sus usuarios / editar, 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 usuarios de la base de datos. Incluso si agregó una nueva columna a la tabla de usuarios, tendría que agregarla al método configure_permitted_parameters. En su caso, es el nombre de usuario, pero también se perdió account_update. 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 Devise. Cualquier campo que agregue a la tabla de usuario debe seguir este patrón de dispositivo. También puede especificar qué página tiene permiso para actualizar este nombre de usuario. En mi ejemplo a continuación, estoy usando la página de actualización del dispositivo. Entonces, como dije, incluso si agregó un nombre de campo personalizado a la tabla Usuarios, debe seguir este patrón.
A continuación, asegúrese de que en su user.rb haya validado el nombre de usuario en su modelo de usuario.
fuente
fuente