(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start': data().getTime(),įvykis:'gtm.js'});var f=d.getElementsByTagName(s)[0], j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src= 'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f); })(window,document,'script','dataLayer','GTM-5LHNRP9'); Aktyvių įrašų užklausos sąsaja - The Codest
The Codest
  • Apie mus
  • Paslaugos
    • Programinės įrangos kūrimas
      • Priekinės dalies kūrimas
      • Galinės dalies kūrimas
    • Staff Augmentation
      • Priekinės dalies kūrėjai
      • Atgalinės versijos kūrėjai
      • Duomenų inžinieriai
      • Debesų inžinieriai
      • QA inžinieriai
      • Kita
    • Patariamoji tarnyba
      • Auditas ir konsultacijos
  • Pramonės šakos
    • Fintech ir bankininkystė
    • E-commerce
    • Adtech
    • Sveikatos technologijos
    • Gamyba
    • Logistika
    • Automobiliai
    • IOT
  • Vertė už
    • CEO
    • CTO
    • Pristatymo vadybininkas
  • Mūsų komanda
  • Case Studies
  • Sužinokite, kaip
    • Tinklaraštis
    • Susitikimai
    • Interneto seminarai
    • Ištekliai
Karjera Susisiekite su mumis
  • Apie mus
  • Paslaugos
    • Programinės įrangos kūrimas
      • Priekinės dalies kūrimas
      • Galinės dalies kūrimas
    • Staff Augmentation
      • Priekinės dalies kūrėjai
      • Atgalinės versijos kūrėjai
      • Duomenų inžinieriai
      • Debesų inžinieriai
      • QA inžinieriai
      • Kita
    • Patariamoji tarnyba
      • Auditas ir konsultacijos
  • Vertė už
    • CEO
    • CTO
    • Pristatymo vadybininkas
  • Mūsų komanda
  • Case Studies
  • Sužinokite, kaip
    • Tinklaraštis
    • Susitikimai
    • Interneto seminarai
    • Ištekliai
Karjera Susisiekite su mumis
Atgal rodyklė GRĮŽTI ATGAL
2019-04-15
Programinės įrangos kūrimas

Aktyviojo įrašo užklausos sąsaja

Marta Polec

Kuriant žiniatinklio programas, našumas yra vienas svarbiausių aspektų, į kurį reikia atsižvelgti. Duomenų gavimo iš duomenų bazės analizė yra geras atspirties taškas ieškant patobulinimų. Šiame straipsnyje rasite pavyzdžių, kaip pagerinti našumą naudojant suvestines funkcijas ir filtruojant duomenis duomenų bazės lygmeniu.

Pradžiai šiek tiek konteksto

Šį straipsnį įkvėpė reali problema, kurią man kartą teko spręsti. Jos sprendimas mane daug ko išmokė, ir aš vis dar turiu jį kaip nuorodą savo atmintyje. Manau, kad pavyzdžiai yra geras mokymosi šaltinis, jie gali daug ką paaiškinti. Šiame straipsnyje norėčiau pasidalyti keliais pavyzdžiais, kaip naudoti "Active Record" užklausų metodus.

Kad nepateikčiau su sritimi susijusių detalių, pavyzdžiams iliustruoti naudosiu bibliotekos pavyzdinę programą. Viskas gana paprasta, kaip parodyta toliau pateiktoje schemoje. Turime keturias lenteles: autorių, knygų, vartotojų ir nuomos. Vienas naudotojas gali pasiskolinti daug knygų, o vieną knygą gali pasiskolinti daug naudotojų, todėl mums reikia jungiamosios lentelės, kad galėtume modeliuoti santykius "daug-daug". Mūsų atveju tai lentelė Rentals. Joje taip pat saugome papildomą informaciją - skolinimosi ir grąžinimo datas. Autorius gali turėti daug knygų, priskirtų jo vardui. Knyga taip pat turi atributą, apibrėžiantį jos žanrą.

Naudotojo skaitymo statistika

Užduotis buvo parengti statistinius duomenis apie vieną vartotoją, kad galėtume pasakyti, kiek kiekvieno žanro knygų buvo pasiskolinta. Pirmoji mano mintis buvo paimti visas naudotojo pasiskolintas knygas, sugrupuoti jas pagal žanrą ir tada atlikti atvaizdavimą, kad kiekvienam žanrui būtų priskirtas knygų skaičius, o ne sąrašas. Štai ką sugalvojau:

Hash[Book.joins(:rentals).where(rentals: { user: user }).group_by(&:genre).map { |genre, books| [genre, books.size] }]

Nors šis metodas veikia ir atrodo švarus, jis neišnaudoja visų "Active Record" užklausų metodų teikiamų galimybių. Jų dėka galime filtruoti ir agreguoti duomenys duomenų bazės lygmeniu, nenaudojant neapdoroto SQL tiesiogiai mūsų kodas. Darbas db lygmeniu taip pat didina mūsų efektyvumą.

Pirmiau pateiktame pavyzdyje vietoj "Ruby" metodo group galime naudoti metodą grouppagal metodą. Jis taikys GRUPĖSBY sąlyga prie tSQL užklausos. Be to, atvaizdavimo ir dydžio metodą galima pakeisti skaičiavimo agregavimo funkcija. Galiausiai gauname užklausą, kuri atrodo taip:

Book.joins(:rentals).where(rentals: { user: user }).group(:genre).count(:books)

Atrodo dar paprasčiau!

Kiti naudingi pavyzdžiai

Toliau rasite keletą kitų užklausos metodų naudojimo būdų, kuriuos, mano nuomone, verta žinoti.

Kvietimas neaktyviems naudotojams

UŽDUOTIS: Užduotis: Filtruoti naudotojus, kurie niekada nesiskolino knygos arba tai padarė daugiau nei prieš metus.

Galėtume gauti visus naudotojus, įtraukdami susijusius nuomotojus, ir tada juos filtruoti naudodami pasirinkimo metodą.

User.includes(:rentals).select do |user|
 user.rentals.empty? ||| user.rentals.none? { ||nuoma| nuoma.start_date >= Date.today - 1.year }
end 

Tačiau, žinoma, nebūtina parsinešti visko. Naudodami užklausos metodus galime filtruoti db lygmeniu. Pirmiausia atrinkime vartotojus, kurie per pastaruosius metus pasiskolino keletą knygų, ir tada pašalinkime juos iš galutinės atrankos.

Štai kaip atrodys papildoma užklausa:

User.joins(:rentals).where(rentals: { start_date: (Date.today - 1.year).Date.today })

O dabar viską sudėkime į vieną visumą:

User.where.not(id: [User.joins(:rentals).where(rentals: {data: (Date.today - 1.year)..Date.today })]))

Nepakankamai atstovaujami autoriai

UŽDAVINYS: Gaukite autorių, turinčių vieną arba nulį pasiskolintų knygų

Tai padaryti naudojant select metodą yra labai paprasta, tačiau vėlgi - nėra reikalo dirbti su tokiu dideliu duomenų rinkiniu, nes db gali jį filtruoti. mus:

Author.includes(:books).select { | |author| author.books.size <= 1 }

Tada autorius, kuriems nepriskirta nė vienos knygos, filtruoti galima greitai ir lengvai:

Author.left_joins(:books).where(books: { id: nil })

Naudojant left_joins (ir apskritai išorines jungtis) svarbu prisiminti vieną dalyką. Jei kairėje lentelėje (čia: autoriai) yra įrašų, neturinčių atitinkamų įrašų dešinėje lentelėje (čia: knygos), dešinės lentelės stulpeliai bus užpildyti nulinėmis reikšmėmis.

Kadangi mums taip pat reikia autorių, kuriems sistemoje priskirta viena knyga, reikia atlikti dar kelias operacijas. Turėsime atlikti grupavimą, skaičiavimą ir pridėti sąlygą. Štai kaip visa tai sudėti:

Author.left_joins(:books).group(:id).having("count(*) <= ?", 1)

Sąlyga pateikiama po apibendrinimo funkcijos, todėl jai nurodyti turime naudoti ne WHERE, o HAVING sąlygą.

Galvojant apie programos našumą verta patikrinti "Active Record" užklausų metodus. Jie gali supaprastinti jūsų kodą ir pagreitinti jo veikimą. Tikiuosi, kad pasidalyti pavyzdžiai padės jums ištirti užklausų metodų teikiamas galimybes.

Skaityti daugiau:

- Laikas naujai tikrovei. Prieš mėnesį prasidėjo nuotolinio darbo era

- Reikia naudoti įprastus JS karkasus "Rails" programėlėje? Stimulus.js gali būti alternatyva

- Interneto programų kūrimas: Kodėl verta rinktis Ruby on Rails technologiją?

Susiję straipsniai

Išmaniojo telefono sveikatos priežiūros programėlės su širdies piktograma ir kylančia sveikatos diagrama, pažymėtos The Codest logotipu, iliustracija, vaizduojanti skaitmeninės sveikatos ir sveikatos technologijų sprendimus.
Programinės įrangos kūrimas

Sveikatos priežiūros programinė įranga: Sveikatos priežiūros paslaugos: tipai, naudojimo atvejai

Įrankiai, kuriais šiandien naudojasi sveikatos priežiūros organizacijos, nė iš tolo neprimena prieš kelis dešimtmečius naudotų popierinių kortelių. sveikatos priežiūros programinė įranga dabar padeda sveikatos sistemoms, pacientų priežiūrai ir šiuolaikiniam sveikatos priežiūros paslaugų teikimui klinikinėse ir...

GERIAUSIAS
Abstrakti mažėjančios stulpelinės diagramos su kylančia rodykle ir auksine moneta, simbolizuojančia ekonomiškumą arba taupymą, iliustracija. Viršutiniame kairiajame viršutiniame kampe pavaizduotas The Codest logotipas ir šūkis "In Code We Trust" šviesiai pilkame fone.
Programinės įrangos kūrimas

Kaip padidinti savo Dev komandą neprarandant produkto kokybės

Didinate savo kūrėjų komandą? Sužinokite, kaip augti neprarandant produkto kokybės. Šiame vadove aptariami ženklai, kad atėjo laikas didinti komandą, komandos struktūra, įdarbinimas, vadovavimas ir įrankiai - ir kaip The Codest gali...

GERIAUSIAS
Programinės įrangos kūrimas

Sukurkite ateičiai atsparias žiniatinklio programas: The Codest ekspertų komandos įžvalgos

Sužinokite, kaip The Codest puikiai kuria keičiamo dydžio interaktyvias žiniatinklio programas, naudodama pažangiausias technologijas ir užtikrindama vientisą naudotojų patirtį visose platformose. Sužinokite, kaip mūsų patirtis skatina skaitmeninę transformaciją ir verslo...

GERIAUSIAS
Programinės įrangos kūrimas

10 geriausių Latvijoje įsikūrusių programinės įrangos kūrimo įmonių

Naujausiame mūsų straipsnyje sužinokite apie geriausias Latvijos programinės įrangos kūrimo įmones ir jų inovatyvius sprendimus. Sužinokite, kaip šie technologijų lyderiai gali padėti pakelti jūsų verslo lygį.

thecodest
Įmonių ir didinimo sprendimai

"Java" programinės įrangos kūrimo pagrindai: A Guide to outsourcing Outsourcing Successfully

Išnagrinėkite šį esminį vadovą, kaip sėkmingai outsourcing "Java" programinę įrangą kurti, kad padidintumėte efektyvumą, įgytumėte patirties ir sėkmingai įgyvendintumėte projektus su The Codest.

thecodest

Prenumeruokite mūsų žinių bazę ir būkite nuolat informuoti apie IT sektoriaus patirtį.

    Apie mus

    The Codest - tarptautinė programinės įrangos kūrimo bendrovė, turinti technologijų centrus Lenkijoje.

    Jungtinė Karalystė - būstinė

    • 303B biuras, 182-184 High Street North E6 2JA
      Londonas, Anglija

    Lenkija - vietiniai technologijų centrai

    • Fabryczna biurų parkas, Aleja
      Pokoju 18, 31-564 Krokuva
    • Brain Embassy, Konstruktorska
      11, 02-673 Varšuva, Lenkija

    The Codest

    • Pagrindinis
    • Apie mus
    • Paslaugos
    • Case Studies
    • Sužinokite, kaip
    • Karjera
    • Žodynas

    Paslaugos

    • Patariamoji tarnyba
    • Programinės įrangos kūrimas
    • Galinės dalies kūrimas
    • Priekinės dalies kūrimas
    • Staff Augmentation
    • Atgalinės versijos kūrėjai
    • Debesų inžinieriai
    • Duomenų inžinieriai
    • Kita
    • QA inžinieriai

    Ištekliai

    • Faktai ir mitai apie bendradarbiavimą su išoriniu programinės įrangos kūrimo partneriu
    • Iš JAV į Europą: Kodėl Amerikos startuoliai nusprendžia persikelti į Europą?
    • Technikos plėtros centrų užsienyje palyginimas: Tech Offshore Europa (Lenkija), ASEAN (Filipinai), Eurazija (Turkija)
    • Kokie yra svarbiausi CTO ir CIO iššūkiai?
    • The Codest
    • The Codest
    • The Codest
    • Privacy policy
    • Website terms of use

    Autorinės teisės © 2026 The Codest. Visos teisės saugomos.

    lt_LTLithuanian
    en_USEnglish de_DEGerman sv_SESwedish da_DKDanish nb_NONorwegian fiFinnish fr_FRFrench pl_PLPolish arArabic it_ITItalian es_ESSpanish nl_NLDutch etEstonian elGreek pt_PTPortuguese cs_CZCzech lvLatvian is_ISIcelandic lt_LTLithuanian