ruby (2.6.5) rails(6.0.0) devise (4.7.2)
Geben Sie zunächst das Linkziel an, damit die # Bearbeitung der gerouteten Benutzer / Registrierungen ausgeführt wird.
Prefix Verb URI Pattern Controller#Action
edit_user_registration GET /users/edit(.:format) users/registrations#edit
Wie unten beschrieben.
<%= link_to 'Meine Seite', edit_user_registration_path(current_user), class: "user-nickname" %>
Da die Funktion zum Aktualisieren von Daten ohne Kennwort in der Steuerung des Geräts implementiert ist, Generieren Sie eine Gerätesteuerung im Terminal.
$ rails g devise:controllers users
Bearbeiten Sie den generierten RegistrationsController wie folgt.
app>controllers>users>registrations_controlle.rb
class Users::RegistrationsController < Devise::RegistrationsController
before_action :configure_account_update_params, only: [:update]
protected
def update_resource(resource, params)
resource.update_without_password(params)
end
def after_update_path_for(_resource)
root_path
end
def configure_account_update_params
devise_parameter_sanitizer.permit(:account_update, keys: [:nickname])
end
end
Ich aktualisiere mit update_resource ohne Passwort. After_update_path_for gibt das Umleitungsziel nach der Aktualisierung an. In configure_account_update_params darf diesmal nur die Spalte mit dem Namen nickname in der Benutzertabelle aktualisiert werden.
Weitere Informationen finden Sie im offiziellen Wiki. https://github.com/heartcombo/devise/wiki/How-To:-Allow-users-to-edit-their-account-without-providing-a-password
Generieren Sie eine Geräteansichtsdatei im Terminal.
$ rails g devise:views
Bearbeiten Sie die Datei edit.html.view der generierten Ansichtsdatei so, dass nur das erforderliche Eingabeformular vorhanden ist.
erb:app>views>devise>registrations>edit.html.erb
<h2>Edit <%= resource_name.to_s.humanize %></h2>
<%= form_for(resource, as: resource_name, url: registration_path(resource_name), html: { method: :put }) do |f| %>
<%= render "devise/shared/error_messages", resource: resource %>
<div class="field">
<%= f.label :nickname %><br />
<%= f.text_field :nickname, autofocus: true, autocomplete: "nickname" %>
</div>
<div class="field">
<%= f.label :email %><br />
<%= f.email_field :email, autofocus: true, autocomplete: "email" %>
</div>
<% if devise_mapping.confirmable? && resource.pending_reconfirmation? %>
<div>Currently waiting confirmation for: <%= resource.unconfirmed_email %></div>
<% end %>
<div class="actions">
<%= f.submit "Update" %>
</div>
<% end %>
Bearbeiten Sie wie folgt und geben Sie den Controller zum Zeitpunkt der Registrierung an.
routes.rb
devise_for :users, controllers: {
registrations: 'users/registrations'
}
Achten Sie beim Aktualisieren darauf, dass Sie nicht von der Kennwortüberprüfung betroffen sind Es wird wie bei :: create hinzugefügt. Mit dieser Beschreibung wird die Kennwortüberprüfung nur angewendet, wenn die Erstellungsaktion ausgeführt wird.
app>models>user.rb
with_options presence: true do
validates :nickname, :birthday
validates :email, uniqueness: true
validates :first_name, :last_name, format: { with: regexp_name }
validates :first_name_read, :last_name_read, format: { with: regexp_name_read }
validates :password, format: { with: regexp_password }, on: :create
end
Durch die Implementierung des oben Gesagten konnten wir das Benutzermodell der Tabelle des Geräts ohne Kennwort aktualisieren. Vielen Dank für Ihren Besuch auf unserer Website.
Recommended Posts