[RUBY] [Rails] EC-Site-Cart-Funktion

Einführung

Ich habe mit Ruby on Rails eine EC-Site erstellt. Zu dieser Zeit habe ich viel Zeit damit verbracht, die Wagenfunktion zu implementieren, daher werde ich beschreiben, wie es geht.

Voraussetzungen

Für die Cart-Funktion ist eine Tabelle in der DB erforderlich. Der folgende Artikel beschreibt die Zuordnung zu anderen Tabellen. [Rails] EC Site DB Design

Der grundlegende Teil der Wagenfunktion

Hier erstellen wir eine Sitzung.

Für Sitzungen sind die folgenden Artikel leicht zu verstehen. [Rails] Verwendung der Sitzung

Kurz gesagt, es ist ein Mechanismus, der Daten speichert. Daher habe ich die Sitzungserstellung für diesen Warenkorb wie folgt codiert.

# application_controller.rb
class ApplicationController < ActionController::Base

private
  #Sitzung erstellen
  def current_cart
    #Wagen aus der Sitzung erhalten_Abrufen von Warenkorbinformationen aus der Warenkorbtabelle basierend auf der ID
    current_cart = Cart.find_by(id: session[:cart_id])
    #Wenn keine Warenkorbinformationen vorhanden sind@current_Warenkorb erstellen
    current_cart = Cart.create unless current_cart
    #Erfassen Sie die ID aus den erfassten Warenkorbinformationen und legen Sie sie in der Sitzung fest
    session[:cart_id] = current_cart.id
    #Warenkorbinformationen zurückgeben
    current_cart
  end
end

Der hier definierte "current_cart" wird auch für andere Steuerungen verwendet.

Legen Sie Produkte in den Warenkorb

Ab hier verwenden wir die zuvor in carts_controller erstellte Methode.

class CartsController < ApplicationController
  before_action :set_line_item, only: [:add_item, :destroy]
  before_action :set_user
  before_action :set_cart

  def show
    @line_items = @cart.line_items
  end

  def add_item
    @line_item = @cart.line_items.build(product_id: params[:product_id]) if @line_item.blank?
    @line_item.quantity += params[:quantity].to_i
    if @line_item.save
      redirect_to current_cart
    else
      redirect_to controller: "products", action: "show"
    end
  end

  def destroy
    @cart.destroy
    redirect_to current_cart
  end

  private
  def set_user
    @user = current_user
  end

  def set_line_item
    @line_item = current_cart.line_items.find_by(product_id: params[:product_id])
  end

  def set_cart
    @cart = current_cart
  end
end

In Bezug auf die Aktion add_item wird auf der Produktdetailseite die Schaltfläche "In den Warenkorb" installiert, und das Produkt wird mithilfe der HTTP-Methode von POST zum Warenkorb hinzugefügt.

@line_item = @cart.line_items.build(product_id: params[:product_id]) if @line_item.blank?

Oben, aber mit der Build-Methode. Build ist ein Alias für new, aber es scheint, dass beim Erstellen eines Objekts des ihm gemäß Konvention zugeordneten Modells build verwendet wird und new andernfalls verwendet wird.

Dieses Mal ist cart das übergeordnete Element und line_item das untergeordnete Element. Daher haben wir build verwendet, um ein Objekt für das line_item-Modell zu erstellen. (Entschuldigung, wenn ich falsch liege)

Grundsätzlich denke ich, dass es bisher als Karren funktioniert.

Apropos

Mit einem Edelstein namens Solidus können Sie in Sekundenschnelle eine EC-Site erstellen.

Referenzartikel ↓ Installationsnotiz von Solidus, dem Nachfolgesystem von Spree

Ich habe versucht, es zu verwenden, aber es scheint, dass die Anpassung langsam ist. Je nach Verwendungszweck kann es eine Ameise sein, es zu versuchen.

Recommended Posts

[Rails] EC-Site-Cart-Funktion
Erstellen einer EC-Site mit Rails 5 ⑨ ~ Erstellen einer Warenkorbfunktion ~
Erstellen Sie eine EC-Site mit Rails 5 ⑩ ~ Erstellen Sie eine Bestellfunktion ~
[Rails] DB-Design für EC-Standort
[Schienen] Kategoriefunktion
Schienen folgen der Funktion
[Rails] Benachrichtigungsfunktion
Erstellen Sie eine EC-Site mit Rails5 ⑤ ~ Kundenmodell ~
Starten Sie EC2 Rails
Stellen Sie RAILS auf EC2 bereit
Erstellen Sie eine EC-Site mit Rails5 Address ~ Adresse, Genre-Modell ~
Erstellen Sie eine EC-Site mit Rails5 ④ ~ Kopf- und Fußzeile ~
Erstellen Sie eine EC-Site mit Rails5 seed ~ Startdateneingabe ~
Implementieren Sie die Anwendungsfunktion in Rails
Implementierung der Fuzzy-Suchfunktion für Schienen
[Schienen] Implementieren Sie die Benutzersuchfunktion
Suchfunktion mit [Rails] Ransack
[Rails] Implementierung der Kategoriefunktion
Schienen ~ Die Nachrichtenfunktion verstehen ~
[Rails] Implementierung der Tutorial-Funktion
[Rails] Implementieren Sie die Image-Posting-Funktion
[Rails] Implementierung einer ähnlichen Funktion
Erstellen Sie eine EC-Site mit Rails5 Boot ~ Bootstrap4-Einstellungen, Controller- / Aktionsdefinition ~
[Rails] Implementierung der CSV-Importfunktion
Fügen Sie eine Suchfunktion in Rails hinzu.
[Ruby on Rails] Paging-Funktion eingeführt
[Rails] Implementierung der Bildvorschau
[Rails] Tag-Verwaltungsfunktion (unter Verwendung von Acts-as-Taggable-On)
[Rails] Über die Implementierung der Like-Funktion
[Rails] Implementierung der Benutzerrückzugsfunktion
[Rails] Implementierung der CSV-Exportfunktion
Implementieren Sie eine einfache Anmeldefunktion in Rails
[Rails] Sprachposting-Funktion ~ Cloudinary, CarrierWave
[Rails] Kommentarfunktion (Registrierung / Anzeige / Löschung)
Rails auf EC2 starten (manuelle Bereitstellung)
[Ruby on Rails] Implementierung der Kommentarfunktion
[Ruby on Rails] DM, Chat-Funktion
Implementieren Sie die CSV-Download-Funktion in Rails
[Rails] Memo zur Implementierung der Kommentarfunktion
[EC2 / Vue / Rails] EC2-Bereitstellungsverfahren für Vue + Rails
[Rails] Aufbau einer AWS EC2-Instanzumgebung
Erstellen Sie eine EC-Site mit Rails5 ③-Set Model-Assoziationen und anderen Dingen-