Railsin mukautettujen validointien ymmärtäminen

huhti 20, 2021
admin

Harkitaanpa vaatimusta ja ymmärretään sitten kunkin tai minkä tahansa näistä tarve:

Harkitaan, että meillä on Item-malli, jonka taulun nimi on items , jossa jokainen tietue edustaa pakettia, jonka attribuutit ovat title, description ,width, height, depth ja weight.

Jokainen Item on noudatettava seuraavia sääntöjä:

  • Haluamme, että otsikon tulee olla minimissään pituudeltaan vähintään 10 merkkiä ja jokaisen otsikon on sisällettävä avainsana i.esim. great-article .
  • Kohteen tilavuuden on oltava 20 ja 3000 kuutiometrin välillä (ts. Tilavuusvalidointi)
  • Kappaleen tiiviys ei saa ylittää 200 grammaa kuutiometriä kohden (ts. Compactness Validation)
  • Sivun pituus ei saa olla alle 15 % suurimmasta sivusta (ts. Suhteellisuusvalidointi).

Poimitaan nyt ensimmäinen sääntö ensimmäisellä lähestymistavalla

  • Käytä mukautettua metodia validoinnin suorittamiseen.

Olemme käyttäneet aivan ensimmäistä lähestymistapaa mukautettuun validointiin, eli määrittelemme validate-metodin malliluokan sisälle.

Tämähän toimii hienosti, mutta lisää myös lisää logiikkaa malliin. Sen on parempi purkaa logiikka erilliseen apuluokkaan aina kun se on mahdollista. Tämä johtuu siitä, että kaikki tietyn validoinnin logiikka on kapseloitu omaan objektiinsa, jolloin se on helppo debugata.

Varmennetaan tiheys käyttämällä toista lähestymistapaa eli luomalla apuluokka validator. Railsin tarjoama #validates_withmetodi osoittaa validoinnin auttajaluokkaan:

class Item < ActiveRecord::Base

validates_with CompactnessValidator

end

Luo nyt auttajaluokka CompactnessValidator

Luo hakemistoon /models/concerns ”compactness_validator.rb”. CompactnessValidator periytyy ActiveModel::Validator:sta, jonka omaisuus on, että siellä on metodi nimeltä #validate. Tämä metodi voi käyttää koko tietuetta. Ja voi tarvittaessa soveltaa virheitä tietueeseen.

class CompactnessValidator << ActiveModel::Validator
def validate(record)
if record.compactness > 10
record.errors.add(:compactness, "is too high to safely dispatch")
end
end
end

Huomaa, tässä voimme lisätä n-määrän validointeja tässä samassa luokassa eri attribuuteille. esim. voimme jopa lisätä validoinnin otsikolle tässä luokassa.

esimerkiksi.

Käytetään nyt kolmatta lähestymistapaa mukautettujen validointien määrittelyyn.

Luoessamme mukautetun validointi-apulaisen, voimme käyttää sitä suoraan aivan kuten railsin sisäänrakennettuja, vain sanomalla, ”item_dimensions_proportion:true”.

class Item < ActiveRecord::Base
...
validates :height, :width, :depth, item_dimensions_proportion: true
...
end

Nyt kun olemme asettaneet item_dimensions_proportion lipun arvoksi true, rails odottaa nyt, että meillä on validointia varten apulaisluokka nimeltä ItemDimensionsProportionValidator. Luodaan siis malleja koskevaan hakemistoon tiedosto ”item_dimensions_proportion_validator.rb”.

Meidän on määriteltävä #validates_each metodi validoinnin helpottamiseksi. Se ottaa jokaisen attribuutin ja tarkistaa arvon validate_each-metodiin kirjoitetun logiikan mukaisesti.

Kustomoitujen validaattoreiden käyttäminen on hienoa, jos haluat purkaa validointiin liittyvän koodin erilliseen luokkaan. Se on todella hyödyllistä myös debuggauksen kannalta, koska kaikki mallin validointikoodi on yhdessä paikassa. Lisäksi voimme jopa käyttää samoja validaattoreita useisiin luokkiin, mikä tekee siitä todella kätevän ja mahtavan.

Kokeile näitä mukautettuja validaattoreita sovelluksissasi ja kerro minulle, jos tämä on auttanut sinua positiivisella tavalla. Voit myös ottaa yhteyttä minuun, jos sinulla on ongelmia @ [email protected].

Haluaisin myös lisätä lukijakuntaani, joten pyydän sinua ystävällisesti jakamaan sen ystävillesi, kollegoillesi jne., jos pidät tätä blogia hyödyllisenä.

Kiitos.

Kiitos.

Vastaa

Sähköpostiosoitettasi ei julkaista.