(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start': new Date().getTime(),event:'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'); Einföld sía í Rails API - The Codest
The Codest
  • Um okkur
  • Þjónusta
    • Hugbúnaðarþróun
      • Framhliðþróun
      • Bakendaþróun
    • Staff Augmentation
      • Framhliðaráþrófarar
      • Bakhliðaráþróunaraðilar
      • Gagnaverkfræðingar
      • Skýjaverkfræðingar
      • Gæðatryggingartæknimenn
      • Annað
    • Það er ráðgjafi
      • Endurskoðun og ráðgjöf
  • Iðnaðargreinar
    • Fjártæknifyrirtæki og bankastarfsemi
    • E-commerce
    • Adtech
    • Heilbrigðistækni
    • Framleiðsla
    • Flutningar
    • Bifreiða
    • Internet hlutanna
  • Gildi fyrir
    • CEO
    • CTO
    • Afhendingarstjóri
  • Teymið okkar
  • Case Studies
  • Vitið hvernig
    • Blogg
    • Fundir
    • Vefnámskeið
    • Auðlindir
Starfsferilmöguleikar Hafðu samband
  • Um okkur
  • Þjónusta
    • Hugbúnaðarþróun
      • Framhliðþróun
      • Bakendaþróun
    • Staff Augmentation
      • Framhliðaráþrófarar
      • Bakhliðaráþróunaraðilar
      • Gagnaverkfræðingar
      • Skýjaverkfræðingar
      • Gæðatryggingartæknimenn
      • Annað
    • Það er ráðgjafi
      • Endurskoðun og ráðgjöf
  • Gildi fyrir
    • CEO
    • CTO
    • Afhendingarstjóri
  • Teymið okkar
  • Case Studies
  • Vitið hvernig
    • Blogg
    • Fundir
    • Vefnámskeið
    • Auðlindir
Starfsferilmöguleikar Hafðu samband
Aftur ör Farðu aftur
2022-02-23
Hugbúnaðarþróun

Einföld sía í Rails API

The Codest

Krzysztof Buszewicz

Eldri nemandi Software Engineer

Ertu reiður í hvert skipti sem þú sérð breytilegar dæmisbreytur í Rails-stýringunni til að sía gögn? Þessi grein er fyrir þig. 🙂

Hér er tómt.

Síur

Þú hefur líklega séð þetta áður:

# app/controllers/api/v1/things_controller.rb

module forritaskil
  module V1
    class ThingsController < BaseController
 def index
 @things = Thing.all
 @things = @things.where(size: params[:size]) if params[:size]
        @things = @things.where('name ILIKE ?', "%#{params[:name_contains]}%") if params[:name_contains]

 render json: @things
 end
    end
  end
end

Af hverju tel ég það vera slæmt kóði? Vegna þess að það gerir einfaldlega stjórnandann okkar feitan.
Að mínu mati ættum við að draga út eins mikla rökfræði og við getum úr stýritækjunum og nota tilgangstengda
hjálparforrit eða þjónustur. Í þessu tilfelli munum við innleiða almennan síu sem við munum geta
til notkunar í mörgum stýritækjum.

En bíddu, fyrst skulum við greina núverandi kóðann. Hann getur verið slæmur en virkar þó.
Við höfum nokkurn upphaflegan umfang (hlutur.allt) og síðan eru takmörkun ef notandinn hefur staðist
tengdur breytur. Fyrir hvert síupróf athugum við í raun hvort breytan var send og ef svo er,
Við beitum síu. Annað er að við þurfum ekki að nota ivar, við getum notað
venjulegar staðbundnar breytur.

Allt í lagi, þá. Gætum við ekki notað einhvern þjónustuhlut til að breyta upphaflegu gildissviði?
Við framkvæmdina getur þetta litið svona út:

# app/controllers/api/v1/things_controller.rb

module API
  module V1
    class ThingsController < BaseController
 def index
 scope = Thing.all
 things = Things::IndexFilter.new.call(scope, params)

 render json: things
 end
    end
  end
end

Það lítur mun betur út núna, en auðvitað þurfum við enn að innleiða síuna.
Athugaðu að undirskrift köllsins verður sú sama fyrir allar auðlindir, svo við getum haft
einhver almenn flokkur fyrir þetta verkefni.

# app/services/generic/index_filter.rb

module Generic
  class IndexFilter
    EMPTY_HASH = {}.freeze

 def self.filters
 EMPTY_HASH
    end

 def call(scope, params)
 apply_filters!(self.class.filters.keys, scope, params)
    end

 private

 def apply_filters!(filter_keys, scope, params)
 filter_keys.inject(scope.dup) do |current_scope, filter_key|
 apply_filter!(filter_key, current_scope, params)
 end
    end

    def apply_filter!(filter_key, scope, params)
 filter = fetch_filter(filter_key)
 return scope unless apply_filter?(filter, params)

      filter[:apply].call(scope, params)
    end

 def apply_filter?(filter, params)
 filter[:apply?].call(params)
    end

 def fetch_filter(filter_key)
 self.class.filters.fetch(filter_key) { raise ArgumentError, 'óþekktur síu' }
    end
  end
end

Virðist flókið? Ekki raunverulega – allt galdurinn gerist í #apply_síur!.
Við tökum afrit af upphaflegu umfanginu og beitum hverjum síu á það.

Þegar við beitum umfanginu þýðir það að við breytum afriti upphaflega umfangsins okkar.
Og við búumst við að síur verði innleiddar sem skrá í sjálf.síur aðferð
af barnastétt. Skulum gera það.

# app/services/things/index_filter.rb

module Things
  class IndexFilter (params) {
 params[:size].is_a?(String)
        },
 apply: ->(scope, params) {
 scope.where(size: params[:size])
 }
 }.freeze,
 name_contains_filter: {
 apply?: ->(params) {
 params[:name_contains].is_a?(String)
        },
 apply: ->(scope, params) {
 scope.where('name ILIKE ?', "%#{params[:name_contains]}%")
 }
 }.freeze
    }.freeze

 def self.filters
 FILTERS
    end
  end
end

Þetta er það! Við höfum skrifað meira kóða, en einföldu síurnar munu líta eins út.
Leið fyrir allar auðlindir. Við höfum hreinsað stýritækið úr kóðanum sem ber ábyrgð.
af síun og veitti sérhæfða bekk fyrir þetta tilgangi sem fylgir mjög
skýr venja.

Tilboð fyrir Ruby-þróunaraðila

Lesa meira:

Kostir og gallar við forritunarþróun í Ruby

Lestar og önnur samgöngutæki

Rails-þróun með tmux, vim, fzf og ripgrep

Tengdar greinar

Myndskreyting af heilbrigðisforriti fyrir snjallsíma með hjartatákni og hækkandi heilsufarsgrafík, merkt með The Codest-merkinu, sem táknar stafræna heilsu og HealthTech-lausnir.
Hugbúnaðarþróun

Heilbrigðis-hugbúnaður: gerðir og notkunartilvik

Tólin sem heilbrigðisstofnanir treysta á í dag líta ekkert út eins og pappírsskjöl frá fyrri áratugum. Heilbrigðisforrit styðja nú heilbrigðiskerfi, sjúklingameðferð og nútímalega heilbrigðisþjónustu á klínískum og...

THECODEST
Yfirlitsmynd sem sýnir hnignandi súlurit með uppstrekktri ör og gullmynt sem táknar kostnaðarhagkvæmni eða sparnað. The Codest-merkið birtist í efra vinstra horni með slagorðinu "In Code We Trust" á ljósgráum bakgrunni.
Hugbúnaðarþróun

Hvernig á að stækka þróunarteymið án þess að fórna gæðum vörunnar

Ertu að stækka þróunarteymið þitt? Lærðu hvernig á að vaxa án þess að fórna gæðum vörunnar. Þessi leiðarvísir fjallar um merki um að kominn sé tími til að stækka, uppbyggingu teymisins, ráðningar, forystu og verkfæri—og hvernig teymið getur...

THECODEST
Hugbúnaðarþróun

Búðu til vefumsóknir sem þola framtíðina: innsýn frá sérfræðiteymi The Codest

Uppgötvaðu hvernig The Codest skarar fram úr við að búa til stigstækar, gagnvirkar vefumsóknir með nýjustu tækni, sem bjóða upp á hnökralausa notendaupplifun á öllum kerfum. Lærðu hvernig sérfræðiþekking okkar knýr fram stafræna umbreytingu og viðskipti...

THECODEST
Hugbúnaðarþróun

Topp 10 hugbúnaðarþróunarfyrirtæki í Lettlandi

Kynntu þér fremstu hugbúnaðarþróunarfyrirtæki Lettlands og nýstárlegar lausnir þeirra í nýjustu grein okkar. Uppgötvaðu hvernig þessir tækniforingjar geta hjálpað til við að efla fyrirtækið þitt.

thecodest
Lausnir fyrir fyrirtæki og vaxtarfyrirtæki

Grunnatriði í Java hugbúnaðarþróun: Leiðarvísir að árangursríkri útvistun

Kannaðu þessa ómissandi leiðbeiningu um árangursríka outsourcing Java hugbúnaðarþróun til að auka skilvirkni, afla aðgangs að sérfræðiþekkingu og tryggja árangur verkefna með The Codest.

thecodest

Gerðu þig áskrifanda að þekkingargrunni okkar og vertu upplýstur um sérfræðiþekkingu upplýsingatæknigeirans.

    Um okkur

    The Codest – Alþjóðlegt hugbúnaðarþróunarfyrirtæki með tæknimiðstöðvar í Póllandi.

    Bretland - Höfuðstöðvar

    • Skrifstofa 303B, 182-184 High Street North E6 2JA
      Lundúnir, England

    Pólland - staðbundin tæknimiðstöðvar

    • Fabryczna skrifstofugarður, Aleja
      Herbergi 18, 31-564 Kraków
    • Brain Embassy, Konstruktorska
      11, 02-673 Varsjá, Pólland

    The Codest

    • Heim
    • Um okkur
    • Þjónusta
    • Case Studies
    • Vitið hvernig
    • Starfsferilmöguleikar
    • Orðabók

    Þjónusta

    • Það er ráðgjafi
    • Hugbúnaðarþróun
    • Bakendaþróun
    • Framhliðþróun
    • Staff Augmentation
    • Bakhliðaráþróunaraðilar
    • Skýjaverkfræðingar
    • Gagnaverkfræðingar
    • Annað
    • Gæðatryggingartæknimenn

    Auðlindir

    • Staðreyndir og goðsagnir um samstarf við utanaðkomandi hugbúnaðarþróunaraðila
    • Frá Bandaríkjunum til Evrópu: Af hverju ákveða bandarísk sprotafyrirtæki að flytja til Evrópu?
    • Samanburður á tæknifjarkerfisþróunarmiðstöðvum: Tech Offshore Europe (Pólland), ASEAN (Filippseyjar), Eurasia (Tyrkland)
    • Hvert eru helstu áskoranir CTO-a og CIO-a?
    • The Codest
    • The Codest
    • The Codest
    • Privacy policy
    • Website terms of use

    Höfundarréttur © 2026 af The Codest. Öll réttindi áskilin.

    is_ISIcelandic
    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 lt_LTLithuanian is_ISIcelandic