Vytvoření nákupního košíku - Ruby on Rails

Obsah

Než budeme moci vytvořit nákupní košík, aby si uživatel mohl vybrat produkty, musíme se naučit používat sezení v rámci Ruby on Rails; Když si uživatel prohlíží náš virtuální obchod, může si vybrat produkty, což se běžně používá pro tento typ aplikace je, že jej nahrajeme do virtuálního nákupního košíku, kde si ponecháme produkt, cenu, celkové náklady na nákupu a množství produktů, dokud nedojde k případné pokladně, kdy se uživatel rozhodne provést nákup.
Abychom splnili to, co navrhujeme, musíme udržovat produkty, které si uživatel v naší aplikaci zvolí, k tomu použijeme sezení, s touto implementací, která dělá kolejnice Data můžeme uchovávat k dispozici, aniž bychom je museli ukládat do databází, a budou k nim přístup uživatel, který je spustil, z prohlížeče, který navazuje spojení s aplikací, se kterým jsou kombinace klíčhodnota Budou uloženy a my je budeme mít k dispozici.
Podívejme se na příklad toho, jak tento kód vypadá, vytvořme novou metodu v naší aplikaci v řadiči úložiště:
 private def find_cart session [: cart] || = Cart.new end 

Přestože se jedná o přibližně 4 řádky kódu, jsou spojeny s poměrně vysokou složitostí, nejprve vytvoříme soukromou metodu, čímž zabráníme tomu, aby ji kolejnice zpřístupnily jako akci v řadiči, a pak uvidíme, že používáme operátor podmíněného přiřazení | | =.
Tento operátor v metodě, která nám umožňuje provádět následující funkce, pokud existuje hash relace, který odpovídá klíč: vozík pak vrátíme jeho obsah, v opačném případě postavíme nový objekt Cart a přiřadíme ho sessionn, tehdy vrátíme jeho hodnotu.
Nyní, když jsme trochu zvládli teoretickou část přístupu, půjdeme trochu hlouběji do funkcí, které musíme vybudovat, jakmile vytvoříme náš nákupní košík, víme, že každý uskutečněný prodej musí udržovat cenu na kterém to bylo vytvořeno pro to, co budeme vytvářet tabulku s názvem řádkové položky, Co to udělá, je uložit řádek výběru kupujícího, podívejme se na kód, který musíme umístit do naší databáze:
 zrušit tabulku, pokud existuje line_items; vytvořit tabulku line_items (id int product_id int množství int unit_price decimal (10,2) omezení fk_items_product primární klíč (id)); není null auto_increment, není null, není null výchozí 0, není null, cizí klíč (product_id) odkazuje na produkty (id), primární klíč (id)); 

Jak vidíme v této definici naší nové tabulky, přidali jsme odkaz na a cizí klíč který spojuje pole product_id s polem id v tabulce produktů, tento vztah nám poslouží při generování modelu.
Protože máme tabulku, můžeme s ní komunikovat, proto musíme vygenerovat nový model, abychom jej mohli používat v rámci naší aplikace. Použijeme následující příkaz z naší konzoly příkazů Ruby on Rails.
 depo> skript ruby ​​/ generování modelu LineItem Jakmile je náš model vygenerován, přidáme do něj následující: [i] app / models / line_item.rb [ / i], protože ne všechny databáze podporují vztahy kolejnic, manipulace z nich je výslovně. třída LineItem <ActiveRecord :: Base patří_k: konec produktu 

Poté, co jsme vytvořili náš model a tabulky pro naši aplikaci, máme jen část 2, abychom ji dokončili s jejím vývojem a abychom mohli mít funkční nákupní košík, který slouží jako odrazový můstek pro skok k mnohem pokročilejším aplikacím.
Pokračujeme ve stavbě nákupního košíku pro naši aplikaci, v Ruby on RailsChcete -li to provést, podívejme se dále na model, který jsme vytvořili, a podívejme se na malé vysvětlení problému. Kolejnice zpracovává konvenci, která vám umožňuje odvodit, jak zacházet se vztahy mezi tabulkami, jakmile je explicitně deklarujeme, tím, že jí řekneme, že náš model LineItem má tento řádek kódu: Patří do: produkt, motor rails již ví, že v tabulce musí být pole s názvem product_id.
Nyní vygenerujeme potřebný kód pro sestavení našeho nákupního košíku, nejprve musíme implementovat metodu v ovladači našeho obchodu pro přidání položek do košíku. Nejprve najdeme tento ovladač: app / controllers / store_controller.rb a uvnitř vytvoříme metodu přidat do košíku s následujícím kódem.
 def add_to_cart product = Product.find (params [: id]) @cart = find_cart @ cart.add_product (product) redirect_to (: action => 'display_cart') end 

Nyní musíme vygenerovat naši třídu košíku, tato konkrétní třída není svázána s modelem ActiveRecord Protože nekomunikuje s databází, vygenerujeme ji v našem adresáři, aby nám to usnadnilo práci aplikace / modely, tam soubor vytvoříme cart.rb.
Do našeho nového souboru umístíme následující:
 třída Košík attr_reader: položky attr_reader: total_price def initialize @items = [] @total_price = 0,0 end def add_product (product) @items << LineItem.for_product (product) @total_price + = product.price end end 

Nyní, když je toto dokončeno, přejdeme k našemu modelu LineItem a umístíme to, co nám chybí:
 třída LineItem <ActiveRecord :: Base patří_k: product def self.for_product (product) item = self.new item.quantity = 1 item.product = product item.unit_price = product.price item end end 

Pojďme udělat krátké shrnutí toho, co zatím máme. Již máme metodu, která nám umožňuje přidat položku do košíku, toto je přidat do košíku, pak máme obsah naší třídy Vozík což nám umožňuje přidat produkt a vydržet ve své třídě LineItem můžeme extrahovat hodnoty těch produktů, které přidáváme. Aby naše aplikace fungovala, potřebujeme implementovat jen několik dalších prvků, nejprve musíme přidat akci, která nám umožní zobrazit pohled, a pokud tomu tak není, vygenerovat jej, přidáme následující:
 def display_cart @cart = find_cart @items = @cart.items end 

Tato metoda bude nyní v našem řadiči, podle našeho názoru: aplikace / zobrazení / obchod, vytvoříme soubor display_cart.rhtml a dovnitř umístíme následující kód:

Váš košík obsahuje věci.


Samozřejmě to stále nefunguje, ale musíme přidat poslední krok a tím je definovat naše nové modely v kontextu aplikace, na kterou půjdeme aplikace / ovladače a uvidíme soubor s názvem aplikace.rb do kterého musíme umístit následující:
 třída ApplicationController <ActionController :: Základní model: model košíku: line_item end 

S tímto bychom již měli své Nákupní košík základní, ale tím se přiblížíme k implementaci finálního produktu s plně rozšířenou funkčností. Tímto dokončujeme tento tutoriál Ruby on Rails a je důležité zmínit, že musíme pečlivě analyzovat kód, který jsme umístili, abychom pochopili důvod, proč funguje, a tímto způsobem generovali kvalitní znalosti.Líbil se vám tento návod a pomohl mu?Autora můžete odměnit stisknutím tohoto tlačítka, čímž mu dáte kladný bod

Vám pomůže rozvoji místa, sdílet stránku s přáteli

wave wave wave wave wave