|
In acest tutorial vei putea citi despre cateva caracteristici ale framework-ului rails, despre cum sa manipulezi structura unui proiect si despre cum sa adaugi linkuri si sa comentezi codul.
Daca nu ai parcurs partile I si II ale acestei serii, este recomandat sa le citesti inainte de a trece mai departe:
Acum ca ai invatat cum sa setezi variabilele globale astfel incat sa transfere informatiile de la un controler la view, este timpul sa inveti cum sa transmiti datele intre diferite actiuni din controler. Pentru acest tutorial vom folosi in continuare controlerul learn. Nu este necesar sa folosesti aceleasi exemple din tutorialul precedent, dar daca le consideri o resursa buna, le poti utiliza.
Apelarea unei actiuni dintr-o alta actiune
Pentru acest exemplu, foloseste-te de cunostintele dobandite saptamana trecuta despre variabilele globale si aplica-le. Mai intai trebuie sa creezi doua actiuni denumite another_action si text, urmand ca apoi sa iei actiunile din text si sa le pui in another_action. Pentru a demonstra functionalitatea scriptului, vom crea o variabila globala care va afisata in actiunea text, apelata din another_action. Codul este:
class LearnController < ApplicationController
def another_action
text
end
def text
@text = 'Acest text provine dintr-o alta actiune'
end
end
In continuare vei crea un view denumit another_action.rhtml, care afiseaza variabila text.
<html>
<head>
<title>Actiune Demo</title>
</head>
<body>
<%= @text %>
</body>
</html>
Explicatie
Dupa cum poti observa, am creat o referinta la actiunea text prin adaugarea ei in interiorul actiunii another_action, ceea ce include in mod implicit si definitia variabilei text.Pentru a demonstra acest principiu, sa analizam diferite situatii.
Cazul 1- Initializarea unei variabile cu o actiune
class LearnController < ApplicationController
def another_action
@text = text
end
def text
misc_text = 'Acest text a fost transmis!'
end
end
Rezultatul cazului 1
Cazul 2 – Inlocuirea unei variabile
Acum lucrurile vor deveni mai complicate.
class LearnController < ApplicationController
def another_action
@text = "text pe care nu il vei vedea"
@text = text
end
def text
wanted_text = overwrite_view
end
def overwrite_view
overwrite_text = 'Acest text rescrie textul original'
end
end
Rezultatul cazului 2
Aceasta este ordinea evenimentelor executate de ultimul cod:
- Initializeaza variabila globala text cu sirul de caractere "text pe care nu il vei vedea";
- Rescrie variabila text cu actiunea text;
- Variabila text are acum valoarea variabilei locale wanted_text;
- Variabila wanted_text este initializata cu actiunea overwrite_view;
- overwrite_view are o variabila locala cu valoarea "Acest text rescrie textul original";
- Acesta te duce inapoi la variabila @text.
Cazul 3 – transmiterea unei variabile
Acest exemplu este mai simplu:
class LearnController < ApplicationController
def another_action
@text = "text pe care nu il vei vedea"
text
end
def text
@text = 'Acest text rescrie textul original'
end
end
Rezultatul cazului 3
Cazul 4 – returnarea unei valori
class LearnController < ApplicationController
def another_action
@text = text
end
def text
first = 'Acest text nu ar trebui sa fie transmis variabilei @text'
second = 'Acest text va fi implicit retinut in variabila'
return first
end
end
Acest exemplu este mai important deoarece introduce un element nou in sintaxa: comanda return, care spune actiunii ce valoare sa returneze.
Rezultatul cazului 4
Linkuri Rails
Daca esti cat de cat familiar cu HTML, ar trebui sa stii ca un link este definit de un tag < a href="">Text< /a>. Framework-ul Rails iti ofera o metoda alternativa, ce poate fi utilizata doar in fisiere .rhtml, nu si in fisiere .rb. Iata un exemplu:
<html>
<head>
<title>Rails Link Demo</title>
</head>
<body>
<%= link_to('Link catre Another Action', :controller => 'learn', :action => 'another_action')%>
</body>
</html>
Intr-o prima faza te-ai putea intreba de ce ai vrea sa schimbi modalitatea in care scrii linkurile, cu atat mai mult cu cat inlocuirea necesita mult timp. Motivul principal este ca un astfel de link este mai lizibil.
In ceea ce priveste sintaxa, partea care contine "controler =>" nu este necesara daca linkul duce catre o actiune ce face parte din acelasi controler.
De asemenea, trebuie sa retii ca sintaxa "controller =>" reprezinta un simbol, care va fi utilizat si in alte exemple.
|