[RUBY] Ich möchte eine Produktinformationsbearbeitungsfunktion ~ part1 ~ implementieren

Annahme

--Verwenden Sie Rubin auf Schienen 6.0.0.

Einführung

Ich mache eine Kopierseite einer bestimmten Frima-Seite, um das Programmieren zu lernen. Ich habe eine Funktion zum Bearbeiten von Produktinformationen implementiert, aber es fiel mir schwer, mehrere Bilder zu veröffentlichen. Deshalb habe ich beschlossen, sie als Referenz zu schreiben. Obwohl es sich nicht um eine große Menge handelt, ist sie in Teile unterteilt, damit Sie ein Gefühl der Leistung bekommen, wenn Sie sie später sehen. bitte verzeih mir. (Ich habe viel geschrieben! Ich möchte sein) Ich glaube nicht, dass irgendetwas in Teil 1 stecken bleibt, aber da es die Grundlage für Teil 2 und später sein wird, werde ich über das Aufwärmen schreiben.

Spezifikation

(Ich werde ein Referenzbild veröffentlichen, wenn das Markup abgeschlossen ist.)

Verfahren

1, Erstellen eines Basiscontrollers und eines Modells. 2, Implementierte Bildposting durch Zuordnen der Bildtabelle. 3, Einführung von jQuery zur Implementierung der Veröffentlichung mehrerer Bilder. 4, Anpassung auf dem Bearbeitungsbildschirm. 5, Vorschau des Bildes.

Wir werden jedes dieser fünf Verfahren separat implementieren.

Na dann

Implementieren

Erstarren Sie zunächst den Grundteil. Zuerst vom Terminal.

$ rails g contoroller products $ rails g model product $ rails db:migrate

Es ist der übliche Fluss. Details wie das Erstellen einer Datenbank und das Beschreiben einer Migrationsdatei werden weggelassen.

Beginnen wir mit der Stammdatei.

app/config/routes.rb


Rails.application.routes.draw do
  root "products#index"
  resources :products
  devise_for :users, controllers: {
    registrations: 'users/registrations'
  }
end

Der Entwicklungsteil bezieht sich auf die bereits implementierten Benutzerfunktionen, sodass Sie sich darüber keine Gedanken machen müssen. Auch hier ist keine ausführliche Erklärung erforderlich. Ich habe eine grundlegende Aktion mit Ressourcen ausgeführt und eine Indexaktion im Stammpfad angegeben. (Dieses Mal werden "Zerstören" und "Zeigen" nicht verwendet, sodass Sie sie ausschließen können.)

Als nächstes folgt die Beschreibung der Steuerung.

app/controllers/products_controller.rb


class ProductsController < ApplicationController
  before_action :ensure_current_user, only[:edit, :update]
  before_action :set_product, only[:new, :create, :edit, :update]

  def index
    @products = Product.all
  end

  def new
    @prodcut = Product.new
  end
  def create
    @product = Product.new(product_params)
    if @product.save
      redirect_to products_path
    else
      render :new
    end
  end

  def edit
  end
  def update
    if @product.update(product_params)
      redirect_to products_path
    else
      render :edit
    end
  end

  private
  def product_params
    params.require(:product).permit(:name).merge(user_id: current_user.id)
  end
  def ensure_current_user
    product = Product.find(params[:id])
    if product.user_id != current_user.id
      redirect_to action: :index
    end
  end
  def set_product
    @product = Product.find(params[:id])
  end
end

Ist es vorerst so ein Ort? Ich werde Schritt für Schritt erklären.

Zunächst zu den grundlegenden Aktionen.

@products = Product.all

Es gibt kein Problem mit dem Index, alle in der Produkttabelle registrierten Datensätze werden abgerufen.

@prodcut = Product.new

Produkte werden neu registriert und erstellt. Erstellen Sie ein neues Objekt in model .new und weisen Sie ihm die Formularwerte zu.

def product_params  params.require(:product).permit(:name).merge(user_id: current_user.id) end

Die auf diese Weise gesendeten Daten werden von der product_params-Methode empfangen. Es ist ein starker Parameter, den jeder liebt. Die Spalte ist nur ein Name, da sie nur die Mindestfunktionalität implementiert.

if @product.save  redirect_to products_path else  render :new end

Die folgende if-Anweisung wird als Fehlerbehandlung bezeichnet. Wenn der Prozess erfolgreich ist, wird der Index angezeigt, und wenn der Prozess fehlschlägt, wird erneut new angezeigt. Das Konzept enthält einige komplizierte Teile, aber ich denke, Sie sind bereits mit den Funktionen vertraut.

@product = Product.find(params[:id])

Als nächstes folgen die Bearbeitungs- und Aktualisierungsaktionen, aber was wir tun, ist das gleiche wie zuvor. Der Unterschied zu create besteht darin, dass Sie kein neues Objekt erstellen müssen, da die Daten bereits vorhanden sind, und das mit der Suchmethode ausgewählte Produkt mitbringen.

def ensure_current_user  product = Product.find(params[:id])   if product.user_id != current_user.id   redirect_to action: :index  end end

Schließlich die Methode verify_current_user. Es mag auf den ersten Blick schwierig erscheinen, aber der Prozess ist sehr einfach. Der Punkt ist, dass Sie die Benutzerinformationen des ausgewählten Produkts und die angemeldeten Benutzerinformationen nicht bearbeiten können, wenn sie unterschiedlich sind.

Nachdem die Beschreibung des Controllers abgeschlossen ist, ist es Zeit, die Ansichtsdatei zu schreiben.

haml:app/view/products/index.html.haml


- if user_signed_in?
  - @products.each do |product|
    - if product.user_id == current_user.id
      = link_to edit_product_path(product.id) do
        #{product.name}
  = link_to("Auflistung", new_product_path)

  %h2 eingeloggt
  = link_to 'Ausloggen', destroy_user_session_path, method: :delete

- else
  %h2 nicht eingeloggt
  = link_to 'Anmelden', new_user_registration_path
  = link_to 'Einloggen', new_user_session_path

Beginnen wir mit dem Index, aber nur die ersten sechs Zeilen sollten notiert werden. Ist der Benutzer angemeldet? Ist das Produkt vom Benutzer registriert? Unter zwei Bedingungen, z. B. Bearbeiten, werden neue Pfade angezeigt.

haml:app/views/products/_form.html.haml


= form_with model: @product, local: true do |f|
  = f.text_field :name, placeholder: 'name'
  = f.submit 'SEND'

Ich glaube auch hier gibt es nichts Besonderes zu erklären. Mit der Methode form_with senden Sie Daten an das Produktmodell. Jetzt müssen Sie dies nur noch als Teilvorlage in new.html.haml und edit.html.haml als Render anzeigen.

Schließlich

Zu diesem Zeitpunkt haben Sie die Möglichkeit implementiert, Produktdaten zu erstellen und zu bearbeiten. (Die Spalte ist nur der Name, aber ...)

In den Spezifikationen,

Dies bedeutet, dass wir diese drei löschen konnten. Im nächsten Teil können wir Bilder hinzufügen (Bildtabelle), also bleiben Sie bitte in Kontakt.

Ich möchte eine Funktion zum Bearbeiten von Produktinformationen implementieren ~ part2 ~

Recommended Posts

Ich möchte eine Produktinformationsbearbeitungsfunktion ~ part1 ~ implementieren
"Lehrer, ich möchte im Frühjahr eine Anmeldefunktion implementieren" ① Hallo Welt
Ich möchte eine Funktion in der Rails Console definieren
Ich möchte der Kommentarfunktion eine Löschfunktion hinzufügen
Ich möchte eine Funktion mit Kotlin und Java erstellen!
Ich möchte eine Browsing-Funktion mit Ruby on Rails hinzufügen
Ich möchte eine Webanwendung entwickeln!
Ich möchte einen Unit Test schreiben!
[Ruby] Ich möchte einen Methodensprung machen!
[Android] Implementieren Sie schnell die Funktion zum Anzeigen des Passworts
Ich möchte eine einfache Wiederholung einer Zeichenkette schreiben
Ich möchte eine Struktur für die Ausnahmebehandlung entwerfen
Ich habe versucht, einen Server mit Netty zu implementieren
Ich habe versucht, mit HCE-F von Android eine Funktion zu implementieren, die Felica Lite entspricht
Ich möchte ein kleines Symbol in Rails verwenden
Ich möchte eine bestimmte Datei mit WatchService überwachen
Ich habe versucht, eine Anmeldefunktion mit Java zu erstellen
[Java] Ich habe versucht, die Yahoo API-Produktsuche zu implementieren
Ich möchte in RSpec auf einen GoogleMap-Pin klicken
Ich möchte eine generische Anmerkung für einen Typ erstellen
Ich habe versucht, eine Nachrichtenfunktion der Rails Tutorial-Erweiterung (Teil 1) zu erstellen: Erstellen Sie ein Modell
Ich habe eine Funktion zum Registrieren von Bildern bei der API in Spring Framework erstellt. Teil 1 (API Edition)
Ich möchte es zusätzlich implementieren, während ich Kotlin auf einer Site verwende, auf der Java ausgeführt wird
Ich habe versucht, die ähnliche Funktion durch asynchrone Kommunikation zu implementieren
[Java] Ich möchte ein Byte-Array in eine Hexadezimalzahl konvertieren
Ich möchte beim Schreiben von Testcode zufällig Informationen generieren
Ich möchte einen relativen Pfad in einer Situation finden, in der Pfad verwendet wird
Ich möchte Zeichen konvertieren ...
Ich möchte ein bestimmtes Modell von ActiveRecord ReadOnly erstellen
Ich möchte eine Liste mit Kotlin und Java erstellen!
Ich möchte eine Methode aufrufen und die Nummer zählen
Ich möchte ein Formular erstellen, um die Kategorie [Schienen] auszuwählen
Selbst in Java möchte ich true mit == 1 && a == 2 && a == 3 ausgeben
Ich möchte dem select-Attribut einen Klassennamen geben
Ich möchte eine Parkettdatei auch in Ruby erstellen
Ich habe versucht, eine Nachrichtenfunktion für die Erweiterung Rails Tutorial (Teil 2) zu erstellen: Erstellen Sie einen Bildschirm zum Anzeigen
Ich habe versucht, eine Webanwendung voller Fehler mit Kotlin zu implementieren
Ich möchte verschiedene Funktionen mit Kotlin und Java implementieren!
Ich habe eine Funktion zum Registrieren von Bildern bei der API in Spring Framework erstellt. Teil 2 (Client Edition)
Ich möchte FireBase verwenden, um eine Zeitleiste wie Twitter anzuzeigen
Ich möchte rekursiv nach Dateien in einem bestimmten Verzeichnis suchen
[Rails] Eine einfache Möglichkeit, eine Selbsteinführungsfunktion in Ihrem Profil zu implementieren
Ich möchte mit link_to [Hinweis] eine Schaltfläche mit einem Zeilenumbruch erstellen.
Ich möchte Swipeback auf einem Bildschirm verwenden, der XLPagerTabStrip verwendet
Ich habe eine Antwortfunktion für die Rails Tutorial-Erweiterung (Teil 1) erstellt.
Ich habe versucht, die Bildvorschau mit Rails / jQuery zu implementieren
Ich habe eine Antwortfunktion für die Rails Tutorial-Erweiterung (Teil 5) erstellt:
Ich möchte mit einem regulären Ausdruck zwischen Zeichenketten extrahieren
Ich habe versucht, mit Rails eine Gruppenfunktion (Bulletin Board) zu erstellen
Versuchen Sie, die iOS14-Widget-Funktion zu implementieren
Ich habe eine einfache Empfehlungsfunktion erstellt.