Pirkinių krepšelio kūrimas - „Ruby on Rails“

Turinys

Kad galėtume sukurti pirkinių krepšelį, kad vartotojas galėtų pasirinkti produktus, turime išmokti juo naudotis sesijos viduje Rubinas ant bėgių; Kai vartotojas naršo mūsų virtualioje parduotuvėje, jis galbūt pasirenka produktus, paprastai naudojamas tokio tipo programoms, kad mes įkeliame jį į virtualų pirkinių krepšelį, kuriame išsaugosime produktą, kainą ir bendrą pirkimo ir produktų kiekio, tai iki galutinio patikrinimo, kai vartotojas nusprendžia pirkti.
Kad atitiktų tai, ką siūlome, turime išlaikyti produktus, kuriuos vartotojas pasirenka mūsų programoje, tam mes naudosime sesijos, tai įgyvendinus bėgiai Galime išsaugoti turimus duomenis, nereikalaudami jų saugoti duomenų bazėse, o juos pradėjęs vartotojas galės pasiekti iš naršyklės, kuri užmezga ryšį su programa, su kuria deriniai Raktasviešai Jie bus saugomi ir turėsime juos prieinamus.
Pažiūrėkime, kaip atrodo šis kodas, sukurkime naują metodą savo programoje parduotuvės valdiklyje:
 private def find_cart session [: krepšelis] || = Krepšelis.naujas galas 

Nors tai yra apie 4 kodo eilutės, jos yra gana sudėtingos, pirmiausia sukuriame privatų metodą, tokiu būdu užkertame kelią bėgiams, kad jis būtų pasiekiamas kaip veiksmas valdiklyje, tada matome, kad naudojame sąlyginio priskyrimo operatorių | | =.
Šis operatorius tokiu metodu, kuris leidžia mums atlikti šias funkcijas, jei yra seanso maišos, atitinkančios raktas: krepšelis tada grąžiname jo turinį, kitaip sukuriame naują krepšelio objektą ir priskiriame jį sesijain, tada grąžiname jo vertę.
Dabar, kai šiek tiek įsisavinome teorinę požiūrio dalį, šiek tiek nuodugniau pažvelgsime į funkcionalumą, kurį turime sukurti, sukūrę pirkinių krepšelį žinome, kad kiekvienas parduodamas produktas turi išlaikyti kainą kuriame mes sukūrėme lentelę, pavadintą eilutės elementai, Tai padės išsaugoti pirkėjo pasirinkimo eilutę, pažiūrėkime kodą, kurį turime įrašyti į savo duomenų bazę:
 numesti lentelę, jei yra eilutės elementai; sukurti lentelę line_items (id int product_id int kiekis int unit_price decimal (10,2) apribojimas fk_items_product pirminis raktas (id)); not null auto_increment, not null, not null numatytasis 0, ne null, užsienio raktas (produkto_id) nuorodos produktai (id), pirminis raktas (id)); 

Kaip matome šiame naujos lentelės apibrėžime, pridėjome nuorodą į svetimas raktas kuris susieja lauką product_id su produktų lentelės ID lauku, šis ryšys mums bus naudingas kuriant modelį.
Kadangi turime lentelę, galime su ja bendrauti, todėl turime sukurti naują modelį, kad galėtume jį naudoti savo programoje. Mes naudosime šią komandų konsolės komandą Rubinas ant bėgių.
 depot> ruby ​​script / generuoti modelį LineItem Kai mūsų modelis bus sukurtas, prie jo pridėsime: [i] app / models / line_item.rb [ / i], nes ne visos duomenų bazės palaiko ryšius su bėgiais, tvarkymą iš jų yra aiškiai išreikšta. klasė LineItem <ActiveRecord :: Bazė priklauso_produktui 

Sukūrę savo modelį ir lenteles savo programai, turime tik 2 jo dalį, kurią baigsime kurti, ir galėsime turėti funkcionalų pirkinių krepšelį, kuris tarnauja kaip tramplinas pereiti prie daug pažangesnių programų.
Mes tęsiame pirkinių krepšelio, skirto mūsų programai, kūrimą Rubinas ant bėgiųNorėdami tai padaryti, toliau pažvelkime į mūsų sukurtą modelį ir šiek tiek pamatysime problemos paaiškinimą. Bėgiai tvarko susitarimą, leidžiantį nuspręsti, kaip traktuoti santykius tarp lentelių, kai mes juos aiškiai deklaruojame, nurodydami, kad mūsų „LineItem“ modelis turi šią kodo eilutę: priklauso_produktui, bėgių variklis jau žino, kad lentelėje turi būti laukas, vadinamas product_id.
Dabar sugeneruosime reikiamą kodą pirkinių krepšeliui sukurti, pirmiausia turime įdiegti savo parduotuvės valdiklyje esantį metodą, kaip pridėti prekių į krepšelį. Pirmiausia surasime šį valdiklį: programa / valdikliai / parduotuvė_kontrolleris.rb ir viduje sukursime metodą į krepšelį su šiuo kodu.
 def add_to_cart product = Product.find (params [: id]) @cart = find_cart @ cart.add_product (product) redirect_to (: action => 'display_cart') pabaiga 

Dabar turime sukurti savo krepšelio klasę, ši konkreti klasė nėra susieta su modeliu „ActiveRecord“ Kadangi ji nesąveikauja su duomenų baze, kad mums būtų lengviau, mes ją sukursime rankiniu būdu savo kataloge programa / modeliai, ten sukursime failą krepšelis.rb.
Naujojo failo viduje įdėsime:
 klasė Krepšelis attr_reader: elementai 

Dabar, kai tai bus baigta, eikime prie mūsų „LineItem“ modelio ir įdėkime tai, ko mums trūksta:
 class LineItem <ActiveRecord :: Bazė priklauso_produktui: produktas def self.for_product (product) item = self.new item.quantity = 1 item.product = product item.unit_price = product.price item end 

Trumpai apibendrinkime, ką turime iki šiol. Mes jau turime metodą, kuris leidžia mums pridėti prekę į krepšelį į krepšelį, tada mes turime savo klasės turinį Krepšelis kuris leidžia mums pridėti produktą ir išlikti mūsų klasėje Eilutės elementas galime išgauti tų pridėtų produktų vertes. Mums tereikia įdiegti dar keletą elementų, kad mūsų programa veiktų, pirmiausia turime pridėti veiksmą, leidžiantį parodyti vaizdą, o jei to nepadarysime, jį sugeneruosime, todėl pridėsime:
 def display_cart @cart = find_cart @items = @cart.items end 

Šis metodas bus mūsų valdiklyje, dabar, mūsų nuomone: programa / peržiūros / parduotuvė, sukursime failą display_cart.rhtml ir viduje įdėsime šį kodą:

Jūsų krepšelyje yra daiktų.


Žinoma, tai vis dar neveikia, tačiau turime pridėti paskutinį žingsnį ir tai yra apibrėžti mūsų naujus modelius, atsižvelgiant į taikomąją programą. programa / valdikliai ir pamatysime failą pavadinimu taikymas.rb į kurią turime įdėti:
 klasė ApplicationController <ActionController :: Pagrindinis modelis: krepšelio modelis: line_item end 

Su šiuo mes jau turėtume savo Prekių krepšelis elementarus, tačiau tai priartins mus prie galutinio produkto su visiškai išplėstomis funkcijomis įgyvendinimo. Tuo mes baigiame šią pamoką Rubinas ant bėgių ir svarbu paminėti, kad turime atidžiai išanalizuoti mūsų pateiktą kodą, kad suprastume jo veikimo priežastį ir tokiu būdu sukurtume kokybiškas žinias.Ar jums patiko ir padėjo ši pamoka?Galite apdovanoti autorių paspausdami šį mygtuką, kad suteiktumėte jam teigiamą tašką

Padėsite svetainės plėtrą, dalintis puslapį su draugais

wave wave wave wave wave