J'ai créé un site EC avec Ruby on Rails. À ce moment-là, j'ai passé beaucoup de temps à implémenter la fonction de panier, je vais donc décrire comment le faire.
Pour avoir la fonction de panier, une table est requise dans le DB. L'article suivant décrit l'association avec d'autres tables. [Rails] DB design of EC site
Ici, nous allons créer une session.
Pour les sessions, les articles suivants sont faciles à comprendre. [Rails] Comment utiliser Session
En bref, c'est un mécanisme qui conserve les données. J'ai donc codé la création de session pour ce panier comme suit.
# application_controller.rb
class ApplicationController < ActionController::Base
private
#Créer une session
def current_cart
#Panier obtenu de la session_Obtenir des informations sur le panier à partir de la table Panier en fonction de l'ID
current_cart = Cart.find_by(id: session[:cart_id])
#Si les informations du panier n'existent pas@current_Créer un panier
current_cart = Cart.create unless current_cart
#Acquérir l'ID à partir des informations de panier acquises et le définir dans la session
session[:cart_id] = current_cart.id
#Informations sur le panier de retour
current_cart
end
end
Le "current_cart" défini ici sera également utilisé pour d'autres contrôleurs.
De là, nous utiliserons la méthode créée précédemment dans carts_controller.
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
Concernant l'action add_item, un bouton "Ajouter au panier" est installé sur la page de détail du produit, et le produit est ajouté au panier en utilisant la méthode HTTP de POST.
@line_item = @cart.line_items.build(product_id: params[:product_id]) if @line_item.blank?
Ci-dessus, mais en utilisant la méthode de construction. Build est un alias pour new, mais il semble que lors de la création d'un objet du modèle qui lui est associé par convention, build est utilisé et new est utilisé autrement.
Cette fois, cart est le parent et line_item est l'enfant, nous avons donc utilisé build pour créer un objet pour le modèle line_item. (Excusez-moi si je me trompe)
Fondamentalement, je pense qu'il fonctionne jusqu'à présent comme un chariot.
Vous pouvez créer un site EC en quelques secondes en utilisant une gemme appelée solidus.
Article de référence ↓ Mémo d'installation de Solidus, le système EC successeur de Spree
J'ai essayé de l'utiliser, mais il semble que la personnalisation soit lente. Cela peut être une fourmi de l'essayer selon le but.
Recommended Posts