[RUBY] [Rails] Fonction de panier de site EC

introduction

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.

Conditions préalables

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

La partie de base de la fonction panier

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.

Mettre les produits dans le panier

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.

Au fait

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

[Rails] Fonction de panier de site EC
Créer un site EC avec Rails 5 ⑨ ~ Créer une fonction de panier ~
Créer un site EC avec Rails 5 ⑩ ~ Créer une fonction de commande ~
[Rails] Conception de bases de données pour le site EC
[Rails] Fonction de catégorie
Les rails suivent la fonction
[Rails] Fonction de notification
Créer un site EC avec Rails5 ⑤ ~ Modèle client ~
Lancez EC2 Rails
Déployer RAILS sur EC2
Créer un site EC avec Rails5 ⑦ ~ Adresse, modèle de genre ~
Créer un site EC avec Rails5 ④ ~ En-tête et pied de page ~
Créez un site EC avec Rails5 ⑥ ~ entrée de données de départ ~
Implémenter la fonction d'application dans Rails
Implémentation de la fonction de recherche floue Rails
[Rails] Implémenter la fonction de recherche d'utilisateurs
Fonction de recherche à l'aide de [rails] ransack
[Rails] Implémentation de la fonction de catégorie
Rails ~ Comprendre la fonction de message ~
[Rails] Implémentation de la fonction tutoriel
[Rails] Implémenter la fonction de publication d'images
[Rails] Implémentation d'une fonction similaire
Créer un site EC avec Rails5 ② ~ Paramètres Bootstrap4, définition du contrôleur / action ~
[Rails] Implémentation de la fonction d'importation CSV
Ajoutez une fonction de recherche dans Rails.
[Ruby on Rails] Introduction de la fonction de pagination
[Rails] Implémentation de la fonction de prévisualisation d'image
[Rails] Fonction de gestion des balises (en utilisant des actes comme des balises)
[Rails] À propos de la mise en œuvre de la fonction similaire
[Rails] Implémentation de la fonction de retrait utilisateur
[Rails] Implémentation de la fonction d'exportation CSV
Créer une fonction de pagination avec Rails Kaminari
Implémenter une fonction de connexion simple dans Rails
[Rails] Fonction de publication vocale ~ Cloudinary, CarrierWave
[Rails] Fonction de commentaire (enregistrement / affichage / suppression)
Lancer des rails sur EC2 (déploiement manuel)
[Ruby on Rails] Implémentation de la fonction de commentaire
[Ruby on Rails] DM, fonction de chat
Implémenter la fonction de téléchargement CSV dans Rails
[Rails] Commentaire mémo de procédure d'implémentation
[EC2 / Vue / Rails] Procédure de déploiement EC2 pour Vue + Rails
[Rails] Construction de l'environnement d'instance AWS EC2
Créer un site EC avec Rails5 ③-Définir des associations de modèles et d'autres choses-