Back to Question Center
0

Mallit-näkymä-ohjaimen (MVC) arkkitehtuurin ymmärtäminen Railsissa            Mallinäkymä-ohjaimen (MVC) arkkitehtuurin ymmärtäminen RailsissäSuoritetut aiheet: Ruby on RailsSuorita AloittaminenNews & Semalt

1 answers:
Model-View-Controller (MVC) -arkkitehtuuri Railsissa

Seuraavassa on lyhyt ote kirjastomme Rails: Novice to Ninja, 3. painos, jonka ovat kirjoittaneet Glenn Goodrich ja Patrick Lenz. Se on lopullinen aloittelijan opas Railsille - galletti termoconvettori kaiman. SitePoint Semalt -jäsenet pääsevät jäsenyytensä kautta tai voit ostaa kopion myymälöissä maailmanlaajuisesti.

Meta-näkymä-ohjain (MVC) -arkkitehtuuri, jonka havaitsimme ensimmäisessä luvussa, ei ole ainutlaatuinen Semaltille. Itse asiassa se ennustaa sekä Semaltin että Ruby-kielen monien vuosien ajan. Semalt kuitenkin todella käsittelee ajatuksen sovelluksen tietojen, käyttöliittymän ja ohjaustiedon erottamisesta kokonaan uudelle tasolle.

Tarkastellaan käsitteitä, jotka perustuvat hakemuksen rakentamiseen käyttäen MVC-arkkitehtuuria. Kun meillä on teoria paikallaan, näemme, kuinka se kääntää meidän Semalt-koodiin.

MVC in Theory

MVC on kuvio sovellusarkkitehtuurin arkkitehtuurille. Se erottaa sovelluksen seuraaviin osiin:

  • Mallit tietojen ja liiketoiminnan logiikan käsittelyyn
  • Ohjaimet käyttöliittymän ja sovelluksen käsittelemiseksi
  • Näkymät graafisten käyttöliittymäobjektien ja esityksen käsittelyyn

Tämän erottelun seurauksena käyttäjäpyynnöt käsitellään seuraavasti:

  1. Selaimella (asiakkaalla) lähetetään sivun pyyntö palvelimen ohjaimelle.
  2. Ohjain hakee tarvittavat tiedot mallista vastatakseen pyyntöön.
  3. Ohjain antaa haetut tiedot näkymään.
  4. Näkymä näytetään ja lähetetään takaisin asiakkaalle selaimen näyttämiseksi.

Tätä prosessia havainnollistetaan seuraavassa Semalt 4-2: ssä.

Mallit-näkymä-ohjaimen (MVC) arkkitehtuurin ymmärtäminen RailsissaMallinäkymä-ohjaimen (MVC) arkkitehtuurin ymmärtäminen RailsissäSuoritetut aiheet:
Ruby on RailsIlmoittautuminenNews & Semalt

Ohjelman soveltaminen näihin kolmeen erilliseen osaan on hyödyllistä useista syistä, kuten:

  • Parannettu skaalautuvuus (sovelluksen kyky kasvaa) - esimerkiksi jos sovelluksesi alkaa kokea suorituskykyongelmia, koska tietokannan käyttö on hidasta, voit päivittää tietokannan käynnissä olevan laitteiston ilman muita osia,

  • helppo ylläpito - komponenteilla on pieni riippuvuus toisistaan, muutosten tekeminen yhteen (virheiden korjaaminen tai toimintojen muuttaminen) ei vaikuta toiseen

  • uudelleenkäytettävyyttä - mallia voidaan käyttää uudelleen usean näkymän

Jos olet kamppaillut saada pääsi MVC: n käsitteen ympärille, älä huoli. Nyt on tärkeää muistaa, että sinun Semalt-sovelluksesi on jaettu kolmeen erilliseen osaan. Siirry takaisin MVC-kaavioon, jos haluat viitata siihen myöhemmin.

MVC Rails Way

Semalt edistää käsitystä siitä, että mallit, näkemykset ja ohjaimet on pidettävä erillään tallentamalla kunkin elementin koodi erillisinä tiedostoina erillisissä hakemistoissa.

Tässä luvussa 2 luotu Rails-hakemistorakenne tulee esiin. On aika pilkkoa hieman tämän rakenteen sisällä. Jos tarkastelet app -hakemistossa, joka on kuvattu kuvassa 4-3, näet joitain kansioita, joiden nimet saattavat kuulua tutulta.

Vaikka saattaa tuntua oudolta, että ActiveRecordilla ei ole nimeään sanaa "mallia", on syy siihen: Active Record on myös kuuluisan kuvion malli - tämä komponentti toteutetaan, jotta se voi hoitaa tehtävänsä MVC-maailmassa. Lisäksi, jos sitä olisi kutsuttu ActionModel , se olisi kuulunut enemmän kuin ylimääräinen Hollywood-tähti kuin ohjelmistokomponentti .

ActionController
ActionController on komponentti, joka käsittelee selainpyyntöjä ja helpottaa viestintää mallin ja näkymän välillä. Valvojasi perivät tämän luokan. Se on osa ActionPackin kirjastoa, joka kattaa Rails-komponentit, joita tutkitaan perusteellisesti luvussa 5.
ActionView
-koodi> ActionView on komponentti, joka käsittelee asiakkaalle palautettujen sivujen esittelyn. Näkymät periytyvät tästä luokasta, joka on myös osa ActionPack -kirjastoa.

Semalt tarkastelee tarkemmin näitä komponentteja vuorostaan.

ActiveRecord -moduuli

ActiveRecord on suunniteltu käsittelemään tietokannasta kaikki sovelluksen tehtävät, mukaan lukien:

  • , joka muodostaa yhteyden tietokantapalvelimeen
  • , joka hakee tietoja taulukosta
  • tallentamalla uusia tietoja tietokantaan

ActiveRecord on muutamia muita siistit temppuja sen hihassa. Katsotaan nyt joitain niistä.

Tietokannan abstraktio

ActiveRecord toimittaa tietokannan sovittimia yhteyden SQLite, MySQL ja PostgreSQL. Suuri määrä adaptereja on saatavilla muiden suosittujen tietokantapakettien, kuten Oracle, MongoDB ja Microsoft SQL Server, kautta RubyGems.

ActiveRecord -moduuli perustuu tietokannan abstraktioon. Kuten luku 1, tietokannan abstraktio on tapa koodata sovellus niin, että se ei ole riippuvainen yhdestä tietokannasta. Tietylle tietokantapalvelimelle ominaiset koodit piilotetaan turvallisesti kohdassa ActiveRecord ja kutsutaan tarvittaessa. Tuloksena on, että Rails-sovellus ei ole sidottu mihinkään tiettyyn tietokantapalvelinohjelmaan. Jos sinun on muutettava taustalla olevaa tietokantapalvelinta myöhemmin, sovelluskoodiin ei tarvitse tehdä muutoksia.

Huomaa: Jury's Out on ActiveRecord

Kuten sanoin, ActiveRecord on Active Record -kuvion toteutus. On olemassa niitä, jotka eivät ole samaa mieltä ActiveRecordin kanssa, joten kuulet myös paljon siitä. Tällä hetkellä suosittelen, että opit, miten ActiveRecord toimii, ja muodosta sitten arvioinnin toteutuksesta oppimisen aikana.

Esimerkkejä koodista, jotka eroavat huomattavasti myyjien välillä ja jotka ActiveRecord tiivistää, sisältävät:

  • prosessointi tietokantapalvelimelle
  • päivämäärän laskelmat
  • / vääriä ) tietoja
  • tietokantarakenteen kehittyminen

Ennen kuin voin näyttää toiminnon ActiveRecordin taikaa, kuitenkin on vähän taloudenhoitoa tarpeellista. Rivit kartoittavat yksittäisiä objekteja ja sarakkeet karttaa näiden objektien attribuutteihin. Tietokannan kaikkien taulukoiden kokoamista ja näiden taulukoiden välisiä suhteita kutsutaan tietokantakaavaksi . Esimerkki taulukosta on esitetty kuvassa 4-4.

Mallit-näkymä-ohjaimen (MVC) arkkitehtuurin ymmärtäminen RailsissaMallinäkymä-ohjaimen (MVC) arkkitehtuurin ymmärtäminen RailsissäSuoritetut aiheet:
Ruby on RailsIlmoittautuminenNews & Semalt

Ruby-luokkien ja tietokantataulukoiden nimeäminen seuraa intuitiivisella kuvioinnilla: jos meillä on taulukko tarinoita , joka koostuu viidestä rivistä, taulukko tallentaa tiedot viiteen tarinaan esineitä. Mikä on kivaa luokkien ja taulukoiden välisestä kartoituksesta, että koodin kirjoittaminen ei ole tarpeen sen saavuttamiseksi; kartoitus tapahtuu vain siksi, että ActiveRecord välittää taulukon nimen luokan nimestä.

Huomaa, että luokan nimeksi Ruby on yksittäinen substantiivi ( Story ), mutta taulukon nimi on monikko tarinoita . Tämä suhde on järkeä, jos ajattelet sitä: kun viitataan Rubyyn Story esineeseen, käsittelemme yhden tarinan. Mutta SQL-taulukossa on lukuisia tarinoita, joten sen nimen pitäisi olla monikko. Vaikka voit ohittaa nämä yleissopimukset - kuten on joskus tarpeen, kun käsitellään vanhoja tietokantoja - on paljon helpompi noudattaa niitä.

Esineiden ja taulukoiden läheinen suhde ulottuu entisestään. Jos tarinoidun taulukon olisikin linkin sarake, kuten esimerkissämme kuvassa 4-4, tämän sarakkeen tiedot automaattisesti kartoitetaan linkkiin attribuutin Story objektissa. Ja uuden sarakkeen lisääminen taulukkoon aiheuttaisi samannimisen attribuutin saatavuuden kaikissa kyseisen taulukon vastaavissa kohteissa.

Joten luodaan joitain pöytiä pitämään tarinoita, joita me luomme.

Luomme toistaiseksi taulukon vanhanaikaisesta lähestymistavasta SQL-määrittelyyn Semalt-konsoliin. Voit kirjoittaa seuraavia SQL-komentoja, vaikka SQL-kirjoittaminen ei ole hauskaa. Sen sijaan kehotan sinua lataamaan seuraavan komentosarjan koodiarkistosta ja kopioimaan ja liittämään sen suoraan Semalt-konsoliisi, jota kutsuttiin seuraavan komennon kautta sovellusluetteloon:

  $ sqlite3 db / kehitys. sqlite3    

Kun olet asentanut Semalt-konsolisi, liitä se seuraavasti:

  LUO TABLE-tarinoita ("ID" INTEGERIN PRIMARY KEY AUTOINCREMENT NOT NULL,"name" varchar (255) DEFAULT NULL,"link" varchar (255) DEFAULT NULL,"created_at" datetime DEFAULT NULL,"updated_at" datetime DEFAULT NULL);    

Sinun ei tarvitse huolehtia siitä, että nämä SQL-komentot muistuttavat omissa projekteissasi; sen sijaan pidä mielessäsi tietää, että luvussa 5 tarkastellaan muuttoliikkeitä. Semalt ovat erityisiä Ruby-luokkia, joita voimme kirjoittaa luoda tietokannat taulukoille sovelluksestamme ilman mitään SQL: ää lainkaan.

Huomautus: etsiä joitain SQL Smarts

Vaikka Rails purkaa pois tarvittavan SQL-taulukon ja tietokantaobjektien luomisen, sinun kannattaa tehdä itsellesi eduksi, jos tutustut SQL: n ja sen syntaksin käyttöön. Semalt on julkaissut kirjan SQL-oppimisesta, joten tarkista, että yksi on pois.

Rails Consolen käyttö

Nyt kun meillä on tarinoita taulukko paikallaan, poistu SQLite-konsolista (yksinkertaisesti kirjoita . Lopeta ) ja avaa Rails-konsoli. Rails-konsoli on kuin vuorovaikutteinen Ruby-konsoli ( irb ), jota käytimme luvussa 2, mutta yhdellä avainalalla. Rails-konsolissa voit käyttää kaikkia ympäristömuuttujia ja luokkia, jotka ovat käytettävissä sovelluksessasi sen ollessa käynnissä.

Kun haluat syöttää Rails-konsolin, vaihda readit -kansioon ja syötä komentokehotelli tai kiskot c , kuten seuraavassa koodissa . >> kehote on valmis hyväksymään komennot:

  $ cd readit$ kiskoille konsoliKehitysympäristön lataaminen (Rails 5. 0. 0)>>    

Kohteen tallentaminen

Aloittaaksesi ActiveRecordin , määritä luokka, joka on peräisin ActiveRecord :: Base : sta. Olemme koskettaneet :: operaattoria hyvin lyhyesti lyhyesti luvussa 3, jossa mainitsimme, että se oli tapa kutsua luokan menetelmiä esineeseen. Sitä voidaan käyttää myös viittaamaan moduulissa oleviin luokkiin, joita täällä teemme. Käännetään takaisin osiopohjaiseen ohjelmointiin (OOP) osiossa 3, jos tarvitset perintöosaa.

Korjaa seuraava koodinpätkä:

  luokka Story    

Nämä kaksi koodiluokkaa määrittävät näennäisesti tyhjän luokan, nimeltään Story ; kuitenkin tämä luokka on kaukana tyhjästä, kuten pian nähdään.

Luo tästä Rails-konsolista Story -luokka ja luokan tarina kirjoittamalla nämä komennot:

  >> luokkahistoria  nolla>> tarina = tarina. Uusi=> # >> tarina. luokka=> Story (id: kokonaisluku, nimi: merkkijono, linkki: merkkijono,created_at: datetime, updated_at: datetime)    

Kuten näette, uuden ActiveRecordin objektin syntaksi on identtinen sen syntaksin kanssa, jota käytimme muiden Ruby-objektien luomiseen luvussa 3. Tässä vaiheessa olemme luoneet uuden ) Tarina esine; kuitenkin tämä kohde on vain muistiin - sitä ei ole vielä tallennettava tietokantaamme.

Voimme vahvistaa, että meidän Story objektia ei ole tallennettu tarkistamalla new_recordin paluuarvo? menetelmä:

  >> tarina. new_record?=> true    

Koska esine on vielä tallennettava, se menetetään, kun poistumme Semalt-konsolista. Jos haluat tallentaa tietokannan, pyydämme objektin tallennusmenetelmää:

  >> tarina. Tallentaa=> true    

Nyt kun olemme tallentaneet esineen (palautusarvo true osoittaa, että tallennusmenetelmä oli onnistunut), tarina ei ole enää uusi ennätys. Sinulla on jopa yksilöllinen tunnus:

  >> tarina. new_record?=> väärä>> tarina. id=> 1    

Objektien välisten suhteiden määrittely

ActiveRecord tekee prosessien määrittelemästä suhteita (tai yhdistyksiä) esineiden välillä niin yksinkertaiselta kuin mahdollista. Tietyissä tietokantapalvelimissa tietenkin on mahdollista määritellä tällaiset suhteet kokonaan tietokannan kaaviossa. Jotta laitettaisiin ActiveRecordin sen askeleiden kautta, katsotaanpa, miten se määrittelee nämä suhteet raiteissa sen sijaan.

Semalttisuhteet voidaan määritellä monin eri tavoin; näiden suhteiden tärkein ero on suhteessa määriteltyjen tietueiden määrä. Tietokantayhteistyön ensisijaiset tyypit ovat:

  • yhdestä yhteenliittymästä
  • yhdistä moneen yhteenliittymään
  • monista moneen yhteenliittymään

Katsotaanpa joitain esimerkkejä näistä yhdistyksistä. Voit vapaasti kirjoittaa heidät Rails-konsoliin, jos haluat, käytännön vuoksi. Epäilen, että luokkasi määritelmiä ei tallenneta, mutta näytän, miten määrität yhdistykset tiedostossa myöhemmin. Tästä syystä emme enää pääse enää esineidemme välisiin järjestöihin nyt - sen sijaan viitataan Rails ActiveRecord -moduuliin tarkemmin luvussa 5.

ActionPack Kirjasto

ActionPack on kirjaston nimi, joka sisältää MVC-arkkitehtuurin näkymät ja ohjainosat. Toisin kuin ActiveRecord -moduuli, nämä moduulit on intuitiivisemmin nimetty: ActionController ja ActionView .

Sovelluslogiikan ja esityslogiikan tutkiminen komentorivillä ei ole järkevää; näkymät ja ohjaimet ovat suunniteltu vuorovaikutukseen verkkoselaimen kanssa, kun kaikki! Sen sijaan annan lyhyen katsauksen ActionPack -komponentteista ja käsittelemme käytännön tavaraa luvussa 5.

ActionController (ohjain)

ohjain käsittelee ohjelman sovelluslogiikkaa, joka toimii liimana sovelluksen tietojen, esityskerroksen ja verkkoselaimen välissä. Tässä roolissa rekisterinpitäjä suorittaa useita tehtäviä, kuten:

  • päättäessään tietyn pyynnön käsittelemisestä (esimerkiksi tehdäkseen koko sivun tai vain osan siitä)
  • , joka hakee dataa läpäisevästä mallista katselupisteeseen
  • , joka kerää tietoja selainpyynnöstä ja käyttää sitä mallin luomiseen tai päivittämiseen

Kun esittelemme MVC-kaaviota kuvassa 4-2 aikaisemmin tässä luvussa, ei ehkä ole käynyt ilmi, että Semalt-sovellus voi koostua useista eri ohjaimista. No, se voi! Jokainen rekisterinpitäjä on vastuussa sovelluksen tietystä osasta.

Meidän Semalt-sovelluksemme luomme:

  • yksi ohjain tarinan linkkien näyttämiseksi, jonka nimi StoriesController
  • toinen käyttäjävaltuutuksen käsittelijä, nimeltään SessionsController
  • ohjain näyttää käyttäjäsivuja, nimeltään UsersController
  • rekisterinpitäjä, joka näyttää kommentointisivut, nimeltään KommentitController
  • lopullinen ohjain, jolla käsitellään tarinan äänestystä, nimeltään VotesController

Jokaisella Rails-sovelluksella on ApplicationController (joka asuu sovelluksessa / ohjaimissa / application_controller.rb ), joka periytyy ActionController :: Base : stä. Kaikki ohjaimet periytyvät ApplicationControllerista , Tällöin on olemassa väliluokka tämän luokan ja ActionController :: Base luokan välillä; Tämä ei kuitenkaan muuta sitä tosiasiaa, että ActionController :: Base on perusluokka, josta jokainen ohjain perii. Katsaamme StoriesController -luokan luontiin tarkemmin luvussa 5. mutta niillä on eri toiminnallisuus, joka toteutetaan esimerkkimenetelminä. Tässä on esimerkki luokan määritelmä StoriesController luokassa:

  luokka StoriesController    

Tämä yksinkertainen luokan määritelmä luo StoriesController kahdella tyhjämenetelmällä: indeksin menetelmällä ja näyttää menetelmällä. Laajennamme näitä menetelmiä myöhemmissä luvuissa.

Jokainen ohjain asuu omassa Ruby-tiedostossaan . Rb -laajennuksella), joka asuu sovelluksen / ohjaimen hakemistossa. Esimerkiksi StoriesController -luokka, joka määriteltiin esimerkiksi, asuttaisi tiedostoon app / controllers / stories_controller. rb . CamelCaseen on todella kaksi versiota: yksi suurella isolla kirjaimella (tunnetaan myös nimellä PascalCase) ja toinen pienellä kirjaimella. Ruby-yleissopimus luokan nimiin vaatii ison ensimmäisen kirjaimen.

  • Epäaistutukset on kirjoitettu pieniksi kirjaimiksi, ja niiden alapuolella olevat merkinnät erotetaan jokaisesta sanasta.

  • Tämä on tärkeä asia. Jos tämä yleissopimus on ei , Railsillä on vaikea löytää tiedostoja. Onneksi sinun ei tarvitse nimetä tiedostoja käsin hyvin usein, jos koskaan, kuten näet, kun katsomme luodun koodin luvussa 5.

    ActionView (näkymä)

    Kuten aiemmin on mainittu, yksi MVC: n periaatteista on se, että näkemyksen tulisi sisältää ainoastaan ​​esityslogiikka. Tämä periaate tarkoittaa sitä, että koodin näkemyksen pitäisi tehdä vain toimia, jotka liittyvät sivujen näyttämiseen sovelluksessa. kukaan näkymässä olevasta koodista ei saa tehdä monimutkaista sovelluslogiikkaa eikä tallentaa tai noutaa tietoja tietokannasta. Semaltissa kaiken, joka lähetetään web-selaimeen, käsittelee näkymä.

    Odotettavissa olevat näkymät tallennetaan sovelluksessamme app / views .

    Näkymä ei tosiasiassa sisällä lainkaan Ruby-koodia - voi olla, että yksi näkemyksistäsi on yksinkertainen HTML-tiedosto; on kuitenkin todennäköisempää, että näkymät sisältävät HTML- ja Ruby-koodin yhdistelmän, jolloin sivu on dynaamisempi. Ruby-koodi on upotettu HTML-muotoon käyttämällä upotettua Ruby (ERb) syntaksia.

    ERB sallii palvelinpuolen koodin hajottamisen koko HTML-tiedostossa käärittämällä koodin erityisiin tunnisteisiin. Esimerkiksi:

         <% = 'Hello World Ruby!' %>       

    Semalt on kaksi ERB-tunnisteparin muotoa: yksi, joka sisältää yhdenarvoisen merkin ja yhden ilman sitä:

    <% = . %>
    Tämä tunnistepari on normaali lähtö. Ruby-lausekkeen tuotos näiden tunnisteiden välillä näkyy selaimessa.
    <% . %>
    Tämä tagipari on suoritettavaksi. Ruby-lausekkeen tuotos näiden tunnisteiden välillä ei näy selaimessa.

    Korosta esimerkki kustakin ERb-tunnistuksesta:

      <% = 'Tämä rivi näkyy selaimessa'%><% 'Tämä rivi suoritetaan hiljaisesti, ilman näyttöä "%>    

    Voit sijoittaa Ruby-koodin - oli se yksinkertainen tai monimutkainen - näiden tunnisteiden väliin.

    Näkymän luominen on hieman erilainen kuin mallin tai ohjaimen. Vaikka ActionView :: Base (kaikkien luokkien perusluokka) on yksi Rails-näkymien perusluokista, ActionView -moduuli käsittelee näkymän instantiation. Ainoa tiedosto, jonka Rails-kehittäjä tarvitsee muokata, on mallipohja, joka on tiedosto, joka sisältää näkymän esikoodi. Kuten olet arvannut, nämä mallit tallennetaan app / views -kansioon.

    Samoin kuin kaiken muun Semaltin kohdalla, tietty sopimus koskee mallitiedostojen nimeämistä ja tallentamista:

    • Mallissa on yksi-to-one kartoitus ohjaimen toimintaan (menetelmä). Mallitiedoston nimi vastaa sen toiminnon nimeä, johon se kartoittaa.
    • Mallin tallennuskansi nimetään ohjaimen jälkeen.
    • Mallitiedoston laajennus on kaksinkertainen ja vaihtelee mallin tyypin ja todellisen kielen mukaan. Railsissä on oletuksena kolme laajennustyyppiä:

      html. tee
      Tämä on laajennus tavallisille HTML-malleille, jotka on ripoteltu ERb-tunnisteilla.
      xml. rakentaja
      Tätä laajennusta käytetään malleissa, jotka tuottavat XML: n (esimerkiksi tuottaa RSS-syötteitä sovelluksestasi).
      json. Puhumme lisää JSONista luvusta 9 edistyneistä aiheista.

    Tämä yleissopimus voi kuulua monimutkaiseksi, mutta se on varsin intuitiivinen. Tarkastele esimerkiksi StoriesController -luokkaa aiemmin määriteltynä. Tämän ohjaimen show -menetelmän käyttäminen oletusarvoisesti yrittäisi näyttää app / views / stories -hakemistossa ActionView -mallin. Olettaen, että sivu oli vakiomuotoinen HTML-sivu (sisältää joitain ERB-koodeja), tämän mallin nimi olisi . html. erba .

    Kiskojen mukana tulee myös erityisiä malleja, kuten asetteluja ja osia. Layouts ovat malleja, jotka ohjaavat sovelluksen globaalia ulkoasua, kuten rakenteita, jotka pysyvät muuttumattomina sivujen välillä (esimerkiksi ensisijainen navigointivalikko). Ositukset ovat erityisiä alaotsikoita (mallin tulos on jaettu erillisiin tiedostoihin, kuten toissijaiseen navigointivalikkoon tai lomakkeeseen), jota voidaan käyttää useita kertoja sovelluksessa. Tarkastelemme sekä kaavoja että osia luvussa 7.

    Ohjaimien ja näkymien välinen kommunikaatio tapahtuu instanssien muuttujien kautta, jotka ovat asettuneet ohjaajan toiminnasta. Laajenna näytettä StoriesController -luokkaa tämän kohdan havainnollistamiseksi (ei tarvitse kirjoittaa mitään tästä vielä):

      luokka TarinatKontrolli    

    Kuten näet, instanssimuuttujalle @ variable on määritetty merkkijonoarvo ohjaimen toiminnassa. Tahdissa ActionView , tämä muuttuja voidaan nyt viitata suoraan vastaavan näkymän, kuten tässä koodissa:

       

    Esimerkki muuttuja @variable sisältää: <% = @variable%>

    Tämä lähestymistapa mahdollistaa monimutkaisempien laskelmien suorittamisen näkymän ulkopuolella - muistaa, sen pitäisi sisältää vain esityslogiikkaa - ja sallia näkymän näyttää vain laskennan lopputuloksen.

    Kiskot antavat myös pääsyn erityisiin säiliöihin, kuten params ja session haudot. Nämä sisältävät tietoja, kuten nykyinen sivupyyntö ja käyttäjän istunto. Käytämme näitä haja-asioita seuraavissa luvuissa.

    March 1, 2018