Ich arbeite mit Rails 5
Ich habe einen neuen Feldbenutzernamen im Modellbenutzer hinzugefügt.
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
Während der Registrierung wird Fehler angezeigt: undefinierte Methode `for 'für # Meinten Sie? Gabel
Spur:
NoMethodError (undefinierte Methode `for 'für # Meinten Sie? 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)
Wer kann helfen? Wie kann man dieses Problem lösen?
ruby-on-rails
devise
ruby-on-rails-5
Dmitriy
quelle
quelle
Antworten:
According to the documentation:
quelle
gem 'devise', '~> 3'
sortiert für mich.Wenn Sie nur das ändern
.for
,.permit
funktioniert es auch. Beispielsweise:Es funktioniert sowohl in Rails 4.2.x als auch in Rails 5.0.x.
quelle
Vergiss nicht
devise_parameter_sanitizer.permit(:account_update, keys: [:username])
quelle
Ich denke, Sie haben account_update in der configure_permitted_parameters-Methode Ihres Controllers verpasst. Sie müssen dem Entwurfsmuster folgen. Devise hat eine Seite zur Kontoaktualisierung. Sie finden dies in views / devise / registrations / edit.html.erb, und Ihr Code funktioniert auch nicht auf der Anmeldeseite. Hier haben Sie die Anmeldeseite angegeben
Um Ihre Benutzertabelle zu aktualisieren, müssen Sie in dem Moment, in dem Sie ein Update in Ihren Benutzern / Bearbeiten senden oder wenn Sie einen Benutzernamen auf der Anmeldeseite senden, diesem Muster folgen, um die Datenbankbenutzertabelle zu aktualisieren. Selbst wenn Sie der Benutzertabelle eine neue Spalte hinzufügen würden, müssten Sie sie der Methode configure_permitted_parameters hinzufügen. In Ihrem Fall ist es der Benutzername, aber Sie haben auch account_update verpasst. Sie sagen im Grunde, dass Sie den Benutzernamen aktualisieren oder die Zeichenfolge zum Feld Benutzername hinzufügen möchten, ohne dem Devise-Muster zu folgen. Jedes Feld, das Sie der Benutzertabelle hinzufügen, sollte diesem Gerätemuster folgen. Sie können auch angeben, auf welcher Seite dieser Benutzername aktualisiert werden darf. In meinem Beispiel unten verwende ich die Seite zum Entwickeln von Updates. Wie ich bereits sagte, müssen Sie diesem Muster folgen, auch wenn Sie der Benutzertabelle einen benutzerdefinierten Feldnamen hinzugefügt haben.
Stellen Sie als Nächstes sicher, dass Sie in Ihrer user.rb den Benutzernamen in Ihrem Benutzermodell überprüft haben.
quelle
quelle