[RAILS] Ruby: Kontobearbeitungsfunktion

【Überblick】

1. Schlussfolgerung </ b>

2. So codieren Sie </ b>

3. Entwicklungsumgebung </ b>

Ergänzung </ b>

  1. Fazit

Codieren Sie die Bearbeitungs- / Aktualisierungsaktion im Controller und die für edit.html.erb erforderliche Hilfsmethode </ b>!
2. Wie man codiert

  • Wir verwenden Devise Gem.

config/roites.rb


Rails.application.routes.draw do
  devise_for :users
  root to:'XXXX#index'

  resources :users, only: [:edit, :update] #---❶
end

❶: Ich möchte den Controller des Benutzers nur zum Bearbeiten und Aktualisieren von Aktionen anweisen, daher codiere ich nur für Ressourcen.

app/controllers/users_controller.rb


class UsersController < ApplicationController

  def edit #---❶
  end

  def update #---❶
    if current_user.update(user_params) #---❷
      redirect_to root_path #---❸
    else
      render :edit #---❸
    end
  end

  private

  def user_params #---❹
    params.require(:user).permit(:name, :email)
  end

end

❶: Ich möchte das Konto (in diesem Fall Name und E-Mail-Adresse) wie im Routing festgelegt bearbeiten, daher möchte ich nach dem Bearbeiten und Bearbeiten den Befehl zum Aktualisieren der Funktion erhalten und das Modell anweisen, anzeigen und die Aktion mit def definieren tun.

❷: Ich bin nicht sicher, welches Konto ich aktualisieren möchte, daher mache ich es für den aktuell angemeldeten Benutzer. current_user kann durch Installieren des Devise Gems verwendet werden.

❸: Die obere Seite wird zurückgegeben, wenn das Update erfolgreich war, und der Bearbeitungsbildschirm wird zurückgegeben, wenn das Update nicht erfolgreich war. Um es kurz zu erklären, wird es umgeleitet, weil ich die Benutzerinformationen nach der Aktualisierung aktualisieren möchte (= Ich möchte den Wert der ursprünglichen Instanzvariablen überschreiben). Wenn dies fehlschlägt, verwende ich Rendern, da ich nur zum Bearbeitungsbildschirm zurückkehren muss, ohne die falschen Informationen des Benutzers zu aktualisieren.

❹: Legen Sie starke Parameter fest, um Daten zu empfangen und unbeabsichtigte Benutzeränderungen und -aktualisierungen zu verhindern. Ich verwende die Methode require, um Informationen aus dem Benutzermodell abzurufen. Wenn Sie die Parameter genauer angeben möchten, verwenden Sie den Spaltennamen als Schlüsselnamen.

params.require(:Modellname).permit(:Spaltenname(Werden Sie ein Schlüsselname),・ ・ ・ ・) 

Wenn Sie die Hilfsmethode form_with verwenden, um die Informationen der aktuell angemeldeten Person zu senden, ist die einfache Kontobearbeitungsfunktion abgeschlossen.

ruby:app/views/users/edit.html.erb


<%= form_with model: current_user, local: true do |f|%>
 <%= f.text_field :name %>
 <%= f.email_field :email  %>
 <%= f.submit "aktualisieren"%>
<% end %>

  1. Entwicklungsumgebung

Ruby 2.6.5
Rails 6.0.3.3
MySQL 5.6.47 SequelPro 1.1.2
VScode

Ergänzung

  1. Sie können die Zusammenführungsmethode in ❹ verwenden, um Hashes zu kombinieren und Informationen hinzuzufügen.
params.require(:user).permit(:name, :email).merge(user_id: current_user.id)