20. maaliskuuta 2020 542 luettu

Scaffolding Ruby on Railsissa tarkoittaa mallin, näkymien ja kontrollerin muodostaman joukon automaattista generointia, jota käytetään yleensä yhteen tietokantatauluun.

Voit esimerkiksi luoda automaattisesti valmiin kontrollerin, mallin ja näkymät täydellä CRUD (Create, Read, Update, Update, Delete) -verkkokäyttöliittymällä Story-taulukkoa varten seuraavalla komennolla:

$rails generate scaffold Story title:string content:text

Se on paljon helpompaa tehdä näin sen sijaan, että koodaisit kaiken itse, se säästää paljon aikaa!

Teline vai mallit?

Vertailtuna telineeseen, joka luo kaiken, mitä tarvitset (ja mitä et tarvitse), mallit luovat vain joitakin toisiinsa liittyviä komponentteja. Paras ja suosikkini tapa selittää telineen ja mallien välinen ero on seuraavan esimerkin avulla:

Generoi mallit

Kun syötät komennon

$rails generate model Story title:string content:text

luot:

invoke active_record sitoo mallisi tietokantaan, kun taas seuraava rivi luo migraatiotiedoston. Migraatioita käytetään tietokannan skeeman muuttamiseen. Tämä migraatiotiedosto luo tietokantataulun nimeltä ’stories’ ja tietokantasarakkeet ’title’ ja ’content’.

Kolmas rivi luo mallin – Ruby-luokan, joka perii Active Recordin. Tämän avulla kaikkia Active Recordissa kutsuttavia metodeja voidaan nyt kutsua mallissasi. Kolme viimeistä riviä luovat malliisi liittyvät testitiedostot.

Vaikka rakennustelineillä pääset nopeasti vauhtiin, sen tuottama koodi ei todennäköisesti sovi täydellisesti sovellukseesi. Haluat todennäköisesti muokata tuotettua koodia. Monet kokeneet Rails-kehittäjät välttävät telineistöä kokonaan ja kirjoittavat mieluummin kaiken tai suurimman osan lähdekoodistaan alusta alkaen. Voit lukea tästä lisää RailsGuidesista.

Kuten näet, generate models ei luo minkäänlaista näkymää, joka näyttää tietoja sivulla. Saadaksesi täydellisen, käyttövalmiin sovelluksen, sinun pitäisi:

  • generoida kontrollerit (joka puolestaan generoi myös näkymät) tai
  • generoida scaffold (joka generoi mallisi, näkymät, kontrollerin ja kirjoittaa routes.rb-tiedostoon).

Jos muutat mielesi ja päätät käyttää scaffoldia sen jälkeen, kun olet jo generoinut mallin, voit aina ajaa

$rails generate scaffold <name>

Se luo kaikki puuttuvat tiedostot.

Generate scaffold

Jos annat komennon

$rails generate scaffold Story title:string content:text

luodaan seuraavat tiedostot:

Kun malliin liittyvät testit on luotu, seuraavalla rivillä luodaan tarinoiden resurssireitit. Resurssireittien tuottamisen jälkeen tulee kontrolleri ja sen toiminnot (index, show, new, edit, create, update ja destroy) sekä näkymät ja kontrollerin testit kullekin näistä toiminnoista.

Rails-reititin tunnistaa URL-osoitteet ja yhdistää ne kontrollerin toimintaan. Oletusarvoisesti kontrollerin toiminto renderöi samannimisen näkymän.

Migration

Joka kerta, kun luot migraation skriptien avulla (generate model/generate scaffold), uusi migraatio lisätään oikeaan hakemistoon. Voit käyttää

$rake db:migrate

tarkistaaksesi, mitä migraatioita ei ole lisätty tietokantaan.

Tuhoa

Kuka tahansa voi vapaasti muokata ja tehdä tarvittavat muutokset sovellukseensa, jotta se toimisi tarkoituksenmukaisesti, vaikka se merkitsisi telineen poistamista kokonaan. Voit poistaa scaffoldin seuraavalla tavalla:

  1. Generoi scaffold:
    $rails generate scaffold Story
  2. Jos olet siirtänyt tiedostot, suorita palautus:
    $rake db:rollback
  3. Tuhoa tai peruuta teline:
    $rails destroy scaffold Story

Tämällä tämän poistat kaikki scaffoldin luomat tiedostot, mutta manuaalisesti tekemiäsi lisämuutoksia ei poisteta.

Johtopäätös

Scaffold on erinomainen käyttää, kun on kyse yksinkertaisista esimerkeistä, nopeista mockupeista tai testauksesta. Muista kuitenkin luoda omat mallisi, kun päätät kehittää uuden sovelluksen. Älä unohda aina testata sovellustasi, ota selvää miten se tehdään Capybaran avulla!

Toivottavasti löysit jotain uutta tänään!

Previously published at https://kolosek.com/rails-scaffold/

Tags

Liity Hacker Noon

Luo ilmainen tili ja avaa yksilöllinen lukukokemus.

Vastaa

Sähköpostiosoitettasi ei julkaista.