Je travaille avec Rails 5
J'ai ajouté un nouveau nom d'utilisateur de champ dans le modèle User.
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
Lors de l'enregistrement, une erreur s'affiche: méthode non définie `pour 'pour # Vouliez-vous dire? fourchette
Trace:
NoMethodError (méthode non définie `for 'for # Vouliez-vous dire? 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 peut aider? Comment résoudre ce problème?
ruby-on-rails
devise
ruby-on-rails-5
Dmitriy
la source
la source
Réponses:
According to the documentation:
la source
gem 'devise', '~> 3'
trié pour moi.Si vous changez juste le
.for
pour.permit
qu'il fonctionne aussi bien. Par exemple:Cela fonctionne à la fois dans Rails 4.2.x et Rails 5.0.x
la source
N'oublie pas
devise_parameter_sanitizer.permit(:account_update, keys: [:username])
la source
Je pense que vous avez manqué account_update dans la méthode configure_permitted_parameters de votre contrôleur, vous devez suivre le modèle de devise. Devise a une page de mise à jour de compte. Vous pouvez le trouver dans views / devise / registrations / edit.html.erb, et votre code ne fonctionnera pas non plus dans la page sign_up, ici vous avez spécifié la page sign_up
Pour mettre à jour votre table utilisateur, à la minute où vous soumettez une mise à jour dans vos utilisateurs / modifier, ou si vous soumettez un nom d'utilisateur dans la page de connexion, vous devez suivre ce modèle de conception, pour mettre à jour la table utilisateur de la base de données. Même si vous avez ajouté une nouvelle colonne à la table utilisateur, vous devrez l'ajouter à la méthode configure_permitted_parameters. Dans votre cas, il s'agit du nom d'utilisateur, mais vous avez également manqué account_update. Vous dites essentiellement que vous souhaitez mettre à jour le nom d'utilisateur ou ajouter la chaîne au champ du nom d'utilisateur sans suivre le modèle Devise. Tout champ que vous ajoutez à la table User doit suivre ce modèle Devise. Vous pouvez également spécifier quelle page est autorisée à mettre à jour ce nom d'utilisateur. Dans mon exemple ci-dessous, j'utilise la page de mise à jour de devise. Donc, comme je l'ai dit, même si vous avez ajouté un nom de champ personnalisé à la table Users, vous devez suivre ce modèle.
Ensuite, assurez-vous que dans votre user.rb vous avez validé le nom d'utilisateur dans votre modèle d'utilisateur.
la source
la source