Oprettelse af indkøbsvogn - Ruby on Rails

Indholdsfortegnelse

Inden vi kan bygge en indkøbskurv, så en bruger kan vælge produkter, skal vi lære at bruge sessioner inden for Ruby on Rails; Når en bruger gennemser vores virtuelle butik, vælger de muligvis produkter, hvad der normalt bruges til denne type applikationer er, at vi uploader det til en virtuel indkøbskurv, hvor vi beholder produktet, prisen, de samlede omkostninger ved køb og mængden af ​​produkterne, dette indtil der er en eventuel checkout, hvilket er når brugeren beslutter at foretage købet.
For at overholde dette, som vi foreslår, skal vi vedligeholde de produkter, som brugeren vælger i vores applikation, til dette vil vi bruge sessioner, med denne implementering, der gør skinner Vi kan holde dataene tilgængelige uden behov for at gemme dem i databaser, og de vil være tilgængelige for brugeren, der startede dem fra den browser, der etablerer forbindelsen til applikationen, som kombinationerne med nøgleværdi De vil blive gemt, og vi vil have dem tilgængelige.
Lad os se et eksempel på, hvordan denne kode ser ud, lad os oprette en ny metode i vores applikation i butikskontrolleren:
 private def find_cart session [: vogn] || = vogn. ny ende 

På trods af at de er omkring 4 linjer kode, indebærer disse en ret høj kompleksitet, først laver vi den private metode, på den måde forhindrer vi, at skinner gør den tilgængelig som en handling i controlleren, så ser vi, at vi bruger den betingede tildelingsoperatør | | =.
Denne operatør i metoden, der giver os mulighed for at udføre følgende funktionalitet, hvis der er en session -hash, der svarer til nøgle: vogn så returnerer vi dens indhold, ellers bygger vi et nyt vognobjekt og tildeler det til sessionn, det er, når vi returnerer dets værdi.
Nu hvor vi har lidt styr på den teoretiske del af tilgangen, vil vi gå lidt mere i dybden med den funktionalitet, vi skal bygge, når vi laver vores indkøbskurv, ved vi, at hvert salg, der foretages, skal opretholde prisen hvor det blev lavet til det vi skal lave et bord kaldet line_items, Hvad dette vil gøre er at gemme linjen i køberens valg, lad os se den kode, vi skal placere i vores database:
 slip tabellen, hvis der findes line_items; oprette tabel line_items (id int product_id int mængde int unit_price decimal (10,2) begrænsning fk_items_product primær nøgle (id)); ikke nul auto_increment, ikke null, ikke null standard 0, ikke null, fremmed nøgle (produkt_id) henviser til produkter (id), primær nøgle (id)); 

Som vi kan se i denne definition af vores nye tabel, har vi tilføjet en reference til a fremmed nøgle der forbinder produkt_id -feltet med id -feltet i produkttabellen, vil dette forhold tjene os, når vi genererer modellen.
Da vi har tabellen, kan vi interagere med den, derfor skal vi generere en ny model, så vi kan bruge den i vores applikation. Vi vil bruge følgende kommando fra vores kommandokonsol Ruby on Rails.
 depot> rubin script / generere model LineItem Når vores model er genereret, tilføjer vi følgende til den: [i] app / models / line_item.rb [ / i], da ikke alle databaser understøtter skinnerelationer, håndtering af dem er eksplicit. klasse LineItem <ActiveRecord :: Base tilhører_til: produkt slut 

Efter at have oprettet vores model og tabellerne til vores applikation, har vi kun del 2 af den til at afslutte med dens udvikling og for at kunne have en funktionel indkøbsvogn, der fungerer som et springbræt til at hoppe til meget mere avancerede applikationer.
Vi fortsætter med konstruktionen af ​​indkøbskurven til vores ansøgning, i Ruby on RailsFor at gøre dette, lad os fortsætte med at se på den model, vi har bygget og se lidt forklaringen bag problemet. Skinner håndterer en konvention, der giver dig mulighed for at udlede, hvordan du behandler relationer mellem tabeller, når vi eksplicit har erklæret dem, ved at fortælle det, at vores LineItem -model har denne kodelinje: tilhører_til: produkt, skinnemotoren ved allerede, at der inden for tabellen skal være et felt kaldet product_id.
Nu skal vi generere den nødvendige kode til at bygge vores indkøbskurv, først skal vi implementere metoden i vores butiks controller for at tilføje varer til kurven. Vi finder først denne controller: app / controllere / store_controller.rb og indeni vil vi oprette metoden Tilføj til kurv med følgende kode i den.
 def add_to_cart product = Product.find (params [: id]) @cart = find_cart @ cart.add_product (product) redirect_to (: action => 'display_cart') end 

Nu skal vi generere vores vognklasse, denne klasse er ikke knyttet til modellen ActiveRecord Fordi den ikke interagerer med databasen, vil vi for at gøre tingene lettere for os generere den manuelt i vores bibliotek app / modeller, der vil vi oprette filen vogn. rb.
Inde i vores nye fil vil vi placere følgende:
 klasse Indkøbsvogn attr_reader: items 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 

Nu med dette færdige, lad os gå til vores LineItem -model og placere, hvad vi mangler:
 klasse LineItem <ActiveRecord :: Base belong_to: product def self.for_product (product) item = self.new item.quantity = 1 item.product = product item.unit_price = product.price item end end 

Lad os lave en kort opsummering af, hvad vi har indtil videre. Vi har allerede den metode, der giver os mulighed for at tilføje en vare til kurven, dette er Tilføj til kurv, så har vi indholdet i vores klasse Vogn som giver os mulighed for at tilføje et produkt og sidde i vores klasse LineItem vi kan udtrække værdierne for de produkter, vi tilføjer. Vi behøver kun at implementere et par flere elementer, så vores applikation fungerer, først skal vi tilføje en handling, der giver os mulighed for at vise visningen og, hvis dette ikke er tilfældet, for at generere den, for dette tilføjer vi følgende:
 def display_cart @cart = find_cart @items = @cart.items end 

Denne metode vil gå i vores controller nu, efter vores opfattelse: app / visninger / butik, opretter vi en fil display_cart.rhtml og inde vil vi placere følgende kode:

Din kurv indeholder ting.


Selvfølgelig virker dette stadig ikke, men vi skal tilføje et sidste trin, og dette er at definere vores nye modeller inden for rammerne af applikationen til dette, vi vil gå til app / controllere og vi vil se en fil kaldet application.rb hvor vi skal placere følgende:
 klasse ApplicationController <ActionController :: Basismodel: vognmodel: line_item end 

Med dette ville vi allerede have vores Indkøbskurv grundlæggende, men det vil bringe os tættere på at implementere et slutprodukt med fuldt udvidet funktionalitet. Med dette afslutter vi denne tutorial om Ruby on Rails og det er vigtigt at nævne, at vi omhyggeligt skal analysere den kode, vi har placeret for at forstå årsagen til, at den fungerer og på denne måde generere kvalitetsviden.Kan du lide og hjælpe denne vejledning?Du kan belønne forfatteren ved at trykke på denne knap for at give ham et positivt punkt

Du vil bidrage til udviklingen af ​​hjemmesiden, at dele siden med dine venner

wave wave wave wave wave