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.
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
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.
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.
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