Mainitsin tuossa aiemmin jo controllerit ja modelit, niin kirjoitanpa vielä lisää niistä vieweistä. Näkymän tarkoitus on tosiaan vain tuoda data controllerista ihmisen ihasteltavaksi. Kuten get started -oppaassakin tehtiin, loin itsekin näkymiä sitä mukaa kun selaimelle tuli virhe puuttuvasta näkymästä. Se olikin lempivirheeni, koska tiesin heti mitä sille piti tehdä.
Controllerissa pitää olla kullekin käytetylle toiminnalle oma def-end, esim.
def show
@temptask = Temptask.find(params[:id])
@projects = Project.all
end
Sitten niillä pitää olla oma näkymänsä, eli app\views-hakemistossa kaikille controllereille on omat hakemistot ja niiden sisällä esimerkiksi \app\views\temptasks\show.html.erb
Näkymät kirjoitetaan template-kielellä, jossa html-koodin sekaan voi laittaa Railsin tulkkaamia pätkiä.
Esimerkiksi näin
<H1>Olet saanut aikaan tämän!</H1>
<p><%= @temptask.text %> (temptask id <%= @temptask.id %>)</p>
Tuossa sivun H1-otsikko on aina sama, mutta temptaskista riippuen seuraavaan kappaleeseen tulee eri teksti eli annetulla id:llä modelin kautta haetun temptaskin tekstikenttä. Id-kohdan olen laittanut vähän debuggaussyistä näkyviin.
Eniten tuskaa on aiheuttanut se mikä viewn mielestä on tunnettu muuttujan arvo ja mikä ei ja miten sen saa sieltä ulos.
Nämä asiat olen oppinut: 1) View tietää ne arvot, jotka controller on sille hakenut tai laskenut tai muuten muodostanut. Jos jokin ei näy, katse controlleriin. 2) Viewn tietämät arvot löytyvät paramsista. Olen käyttänyt sitä esim. näin:
<p><%= link_to 'Muokkaa', edit_project_goal_path(params[:project_id],@goal.id) %></p>
Sen mitä params pitää sisällään saa näkyviin seuraavan kaltaisella komennolla:
logger.debug "DEBUG params inspect #{params.inspect}"
Logger.debug siis printtaa viestejä serverin komentokehote-ikkunaan sinne kaikkien muiden printtien sekaan. Siksi laitoin selkeästi isoilla kirjaimilla tuon DEBUG rivin alkuun. Params:n varsinainen sisältö tulostuu #-merkistä alkavalla rimpsulla.
Joskus, itselleni vielä epäselvästä syystä, params:ssä on se haluttu arvo hashin sisällä. Eli jos normaalisti params:ssa on jutska1 => arvo1, jutska2 => arvo2, niin joskus se onkin jutska1 => {zydeemi1 => arvo3}. Tämän arvon saa ulos laittamalla nuo jutskat ja zydeemit peräkkäin omissa hakasuluissaan. Eli näin:
goal_id = params[:goal][:id]
Ei kommentteja:
Lähetä kommentti