Crearea coșului de cumpărături - Ruby on Rails

Cuprins

Înainte de a putea construi un coș de cumpărături, astfel încât un utilizator să poată selecta produse, trebuie să învățăm să folosim sesiuni în Ruby on Rails; Când un utilizator navighează în magazinul nostru virtual, acesta va selecta eventual produse, ceea ce este utilizat în mod normal pentru acest tip de aplicație este că îl încărcăm într-un coș de cumpărături virtual, unde vom păstra produsul, prețul, costul total al achiziție și cantitatea produselor, aceasta până când există o eventuală plată, care este momentul în care utilizatorul decide să efectueze achiziția.
Pentru a respecta acest lucru pe care îl propunem, trebuie să menținem produsele pe care utilizatorul le alege în aplicația noastră, pentru aceasta vom folosi sesiuni, cu această implementare care face șine Putem păstra datele disponibile fără a fi nevoie să le stocăm în baze de date și vor fi accesibile de către utilizatorul care le-a pornit din browserul care stabilește conexiunea la aplicație, cu care combinațiile cheieo valoare Ele vor fi stocate și le vom avea disponibile.
Să vedem un exemplu de cum arată acest cod, să creăm o nouă metodă în aplicația noastră în controlerul magazinului:
 private def find_cart session [: cart] || = Cart.new end 

În ciuda faptului că sunt aproximativ 4 linii de cod, acestea implică o complexitate destul de ridicată, mai întâi facem metoda privată, în acest fel împiedicăm șinele să o facă disponibilă ca acțiune în controler, apoi vedem că folosim operatorul de atribuire condiționată | | =.
Acest operator în metoda care ne permite să realizăm următoarea funcționalitate, dacă există un hash de sesiune care corespunde la cheie: car apoi îi returnăm conținutul, altfel construim un nou obiect Cart și îl atribuim sesiunii, atunci îi returnăm valoarea.
Acum, că am însușit puțin partea teoretică a abordării, vom aprofunda puțin mai mult funcționalitatea pe care trebuie să o construim, odată ce ne-am făcut coșul de cumpărături, știm că fiecare vânzare care se face trebuie să mențină prețul la care a fost creat pentru ceea ce vom crea o tabelă numită elemente_linie, Ceea ce va face este să stocăm linia de selecție a cumpărătorului, să vedem codul pe care trebuie să-l plasăm în baza noastră de date:
 drop table dacă există elemente_linie; create table line_items (id int product_id int quantity int unit_price zecimal (10,2) constrângere fk_items_product cheie primară (id)); nu nul auto_increment, nu nul, nu nul implicit 0, nu nul, cheie străină (product_id) referințe produse (id), cheie primară (id)); 

După cum putem vedea în această definiție a noului nostru tabel, am adăugat o referință pentru un cheie externă care asociază câmpul produs_id cu câmpul id al tabelului de produse, această relație ne va servi atunci când generăm modelul.
Deoarece avem tabelul, putem interacționa cu acesta, pentru aceasta trebuie să generăm un nou model, astfel încât să îl putem folosi în aplicația noastră. Vom folosi următoarea comandă din consola noastră de comenzi Ruby on Rails.
 depot> ruby ​​script / generate model LineItem Odată ce modelul nostru este generat, vom adăuga următoarele: [i] app / models / line_item.rb [/ i], deoarece nu toate bazele de date acceptă relații cu șine, manipulare dintre ele este explicit. class LineItem <ActiveRecord :: Base appartine_to: produs sfârșit 

După ce ne-am creat modelul și tabelele pentru aplicația noastră, avem doar partea 2 din acesta pentru a finaliza cu dezvoltarea sa și pentru a putea avea un coș de cumpărături funcțional care servește drept trambulină pentru a trece la aplicații mult mai avansate.
Continuăm cu construcția coșului de cumpărături pentru aplicația noastră, în Ruby on RailsPentru a face acest lucru, să continuăm să analizăm modelul pe care l-am construit și să vedem puțin explicația din spatele problemei. Șine gestionează o convenție care vă permite să deduceți cum să tratați relațiile dintre tabele odată ce le-am declarat în mod explicit, spunându-i că modelul nostru LineItem are această linie de cod: aparține_to: produs, motorul cu șine știe deja că în tabel trebuie să existe un câmp numit id_produs.
Acum vom genera codul necesar pentru a ne construi coșul de cumpărături, mai întâi trebuie să implementăm metoda în controlerul magazinului nostru pentru a adăuga articole în coș. Mai întâi vom localiza acest controler: app / controllers / store_controller.rb iar în interior vom crea metoda adaugă în coș cu următorul cod.
 def add_to_cart product = Product.find (params [: id]) @cart = find_cart @ cart.add_product (product) redirect_to (: action => 'display_cart') end 

Acum trebuie să ne generăm clasa Cart, această clasă specială nu este legată de model ActiveRecord Deoarece nu interacționează cu baza de date, pentru a ne ușura lucrurile, o vom genera manual în directorul nostru aplicație / modele, acolo vom crea fișierul cart.rb.
În noul nostru fișier vom plasa următoarele:
 class Cart attr_reader: items attr_reader: total_price def initialize @items = [] @total_price = 0.0 end def add_product (produs) @items << LineItem.for_product (product) @total_price + = product.price end end 

Acum, cu acest lucru finalizat, să mergem la modelul nostru LineItem și să plasăm ceea ce ne lipsește:
 class LineItem <ActiveRecord :: Base appartine_to: produs def self.for_product (produs) item = self.new item.quantity = 1 item.product = produs item.unit_price = product.price end end 

Să facem un scurt rezumat al ceea ce avem până acum. Avem deja metoda care ne permite să adăugăm un articol în coș, aceasta este adaugă în coș, atunci avem conținutul clasei noastre Cart ceea ce ne permite să adăugăm un produs și să durăm în clasa noastră LineItem putem extrage valorile acelor produse pe care le adăugăm. Trebuie doar să implementăm câteva elemente, astfel încât aplicația noastră să funcționeze, mai întâi trebuie să adăugăm o acțiune care să ne permită să afișăm vizualizarea și, în caz contrar, să o generăm, pentru aceasta vom adăuga următoarele:
 def display_cart @cart = find_cart @items = @ cart.items end 

Această metodă va merge în controlerul nostru, acum, în viziunea noastră: aplicație / vizualizări / magazin, vom crea un fișier display_cart.rhtml iar în interior vom plasa următorul cod:

Cosul tau contine lucruri.


Desigur, acest lucru încă nu funcționează încă, trebuie să adăugăm un ultim pas și acesta este pentru a defini noile noastre modele în contextul cererii pentru care vom merge aplicație / controlere și vom vedea un fișier numit aplicație.rb în care trebuie să plasăm următoarele:
 clasa ApplicationController <ActionController :: Model de bază: model de coș: line_item end 

Cu aceasta am avea deja pe ale noastre Cărucior de cumpărături de bază, dar asta ne va aduce mai aproape de implementarea unui produs final cu funcționalitate complet extinsă. Cu aceasta încheiem acest tutorial de Ruby on Rails și este important să menționăm că trebuie să analizăm cu atenție codul pe care l-am plasat pentru a înțelege motivul pentru care funcționează și pentru a genera în acest fel cunoștințe de calitate.V-a plăcut și ați ajutat acest tutorial?Puteți recompensa autorul apăsând acest buton pentru a-i oferi un punct pozitiv

Vei ajuta la dezvoltarea site-ului, partajarea pagina cu prietenii

wave wave wave wave wave