[b]Kas ir Ruby?[/b]
Ruby ir atvērtā koda programmēšanas valoda, kurā uzsvars tiek likts uz vienkāršību un produktivitāti. Valodas sintakse ir ļoti naturāla – līdzīga dabīgai valodai, un tāpēc ir salīdzinoši viegli apgūstama pat iesācējam. Ruby ir salīdzinoši jauna programmēšanas valoda, tā parādījās 1995. gadā un tās autors ir Yukihiro Matsumoto.
[b]Kas ir Rails?[/b]
Rails ir ietvars (framework), kas izmanto Ruby programmēšanas valodu. Ietvars ir tāda vide, rīku kopums, kurus ir uzrakstījuši programmētāji, lai atvieglotu darbu citiem programmētājiem. Rails tika izlaists 2004. gadā, un tā radītājs ir David Heinemeier Hansson.
Pirmkārt, Ruby On Rails (RoR) ir ļoti objekt-orientēta vide. Tas nozīmē, ka web-lapa tiek veidota un uztverta kā tāda „pasaule”, kurā mijiedarbosies dažādi objekti, piemēram, autors pievienos rakstus, raksts saturēs komentārus, kategorijā ietilps noteikti raksti utt. Par objekt-orientēto programmēšanu (OOP) Internetā ir pieejams ļoti daudz resursu. Otrkārt, galvenā RoR iezīme ir tāda, ka tas pielieto web-lapai tā saucamo Model – View – Controller (MVC) izstrādes arhitektūru. MVC pamatā ir visas web-lapas sadalīšana loģiskos vienumos, piemēram, datu (Model) atdalīšana no lietotāja interfeisa (View). Tādā veidā interfeisa mainīšana nekādīgi neietekmēs datus un otrādi. MVC piedāvā vēl tādu starplīmeņa komponenti kā kontrolieri (Controller).
[b]Kas ir Model?[/b]
Modelis apraksta datu objektu. Tas ir kā šablons kādai lietai. Piemēram, blogā (tīmekļa dienasgrāmatā) datu objekti varētu būt: raksts, komentārs, kategorija, lietotājs u.c. Modelis ne tikai nosaka objektu kā tādu, bet arī apraksta tā atribūtus (rakstam ir nosaukums, saturs, publicēšanas laiks utt.), kā arī modelis definē objektam piemērojamās metodes vai darbības, kuras var izpildīt šis objekts, piemēram, rakstu var saglabāt, izdēst vai izlabot. Tie, kuriem OOP nav sveša, bez problēmām sapratīs, kas ir Model RoR vidē. Tāpat jāpiebilst, ka, protams, šie objekti atbalsta mantošanu (inheritance) un citas OOP patīkamās lietas. Konkrēti RoR vidē Model ir nekas cits kā klase, kas apraksta kādu no datu bāzē glabājamajiem objektiem.
[i]Model labumi.[/i]
Modeļa klasē ir iespējams izmantot ļoti daudz noderīgu RoR funkciju. Piemēram, mums ir modelis ‘User’, kas apraksta vienu portāla lietotāju no datu bāzes tabulas ‘Users.’ Ja veidojam reģistrēšanās iespēju, protams, gribēsim, lai katra lietotāja vārds būtu unikāls. To var panākt ar vienu koda rindiņu modeļa failā:
[q]validates_uniqueness_of :user_name[/q]
kur ‘user_name’ ir tabulas ‘Users’ kolonas nosaukums. Līdzīgi varam aizliegt reģistrēties, ja cilvēks nav norādījis, piemēram, e-pastu:
[q]validates_presence_of :email[/q]
Vēl viena labā lieta, ko piedāvā RoR, ir objekt-orientēta pieeja datu bāzes tabulu relācijām. Relācija nozīmē saistību starp vairākām datu bāzes tabulām, piemēram, veidojot forumu, mums varētu tabula ‘Topiki’ un ‘Autori’, kuras būtu savā starpā saistītas, lai zinātu, kurš autors ir publicējis kuru topiku. RoR šajā sakarā piedāvā tādu lietu kā asociācijas (associations). Ar to palīdzību mēs varam definēt saistības starp modeļiem. Lai definētu asociāciju, atkal ir nepieciešama tikai viena koda rindiņa! Izmantojot foruma piemēru, autora modelī aprakstīsim tā asociāciju ar topiku:
[q]has_many :topics[/q]
un tas arī ir viss! Kāds no tā labums? Tādā veidā katram autoram tiks piesaistīti visi viņa publicētie topiki, un vēlāk, kad rakstīsim kontrolieru kodu, tas ļoti noderēs. Piemēram, atlasot ar RoR palīdzību no datu bāzes vienu konkrētu autoru, mēs uzreiz iegūstam pieeju pie visiem topikiem, kurus autors ir publicējis, izmantojot punkta operatoru:
[q]author.topics[/q]
Līdzīgi definēsim arī topika asociāciju ar autoru:
[q]belongs_to :author[/q]
Tagad varēsim uzreiz noskaidrot konkrēta topika autoru, izmantojot [i]topic.author[/i] pierakstu.
Protams, lai tas viss darbotos, datu bāzes tabulās jābūt definētām šīm saistībām. Kā veidot relāciju datu bāzes, var palasīt Internetā pieejamajos materiālos.
Modelim arī piemīt dažādas metodes (funkcijas), kas ļauj veikt darbības ar šo modeli īpašos gadījumos. Piemēram, pirms komentāra saglabāšanas datu bāzē, vēlamies pārliecināties, vai tajā nav pārāk garu simbolu virkņu, kas dažos gadījumos var sabojāt lapas dizainu. Izmantosim modeļa metodi before_save, kurā arī uzrakstīsim savu apstrādes kodu, un šī funkcija tiks automātiski izsaukta pirms katra komentāra saglabāšanas.
[b]Kas ir Controller?[/b]
Kontrolieris izpilda un reaģē uz notikumiem, kurus parasti izraisa lietotāja darbības web-lapā. Kontrolieris arī var veikt izmaiņas modelī. Šie notikumi var būt dažādi, piemēram, lapas ielāde, kad lietotājam jāparāda „svaigākie” raksti, kontrolieris atbild par šo darbu. Kontrolieris arī nodrošinās ielogošanās iespēju web-lapā, komentāru pievienošanu u.c. darbības. Tas ir koda fails, kurā uzraksta dažādas funkcijas darbību veikšanai ar objektiem (modeļiem). Parasti kontrolierim atbilst savs skats, kurā tas arī parāda apstrādātās informācijas rezultātus. Tipisks MVC tipa web-lapas darbības scenārijs ir tāds:
1) Lietotājs veic kādu darbību (piemēram, nospiež pogu).
2) Kontrolieris uztver ienākošo notikumu.
3) Kontrolieris piekļūst modelim, veic ar to nepieciešamās darbības, ko lietotājs ir vēlējies.
4) Skats (netieši) izmanto modeli, lai uzģenerētu atbilstošo lietotāja interfeisu. Skats iegūst datus no modeļa, bet modelis par skatu „neko nezina”.
5) Lietotāja saskarne gaida nākamās lietotāja darbības, lai uzsāktu šo ciklu no jauna.
Kontrolieris arī ir web-lapas galvenais dzinis. Protams, kontrolieru parasti ir daudz, jo katrs atbild par kādas konkrētas web-lapas daļas apstrādi. Tas padara lapas tehnisko uzbūvi saprotamāku. Kontrolierī raksta funkcijas, kas iegūst, apstrādā datus no modeļiem un parāda tos skatos.
[i]Controller labumi.[/i]
Piemēram, forumam varētu būt topiku kontrolieris, kas parāda visu topiku sarakstu. Protams, topiki glabājas datu bāzē, un tos kaut kā ir jāiegūst no turienes. RoR vidē datu bāzes tabulas parasti apzīmē modeļa nosaukums, kas sākas ar lielo burtu un ir vienskaitlī. Kā lai atlasa topikus no datu bāzes? Protams, ka ar vienu koda rindiņu!
[q]Topic.find(:all)[/q]
Un nekāda SQL! RoR piedāvā ļoti spēcīgu find funkciju, kas ļauj atlasīt datus visdažādākajos veidos. Protams, neviens neliedz arī izmantot SQL. Tam ir paredzēta funkcija find_by_sql, kas kā parametru saņem SQL vaicājumu (query).
[b]Kas ir View?[/b]
View jeb skats attēlo modeli cilvēkam saprotamā veidā, parasti kā web-lapas lietotāja interfeisa elementu. RoR vidē tas ir fails, kas satur gan (X)HTML elementus, gan ievietoto Ruby kodu, kas parasti ir ietverts tagos <% %>. Skatos parasti atrodas tās web-lapas daļas, kuras dinamiski mainās, bet ne viss web-lapas kods. Skats atbilst kādam kontrolierim, un tajā ir pieejami mainīgie (variables), kuri ir definēti kontrolierī.
[i]View labumi.[/i]
Tā piemēram, ja mums ir skats ‘topics’ un kontrolieris ‘topic_controller’, kurā esam ielasījuši mainīgajā @topics visus topikus, tad, lai parādītu šos topikus skatā, izmantosim kaut ko līdzīgu:
[q]<% for t in @topics %>
<%= t.title %>
<%= t.content %>
<% end %>[/q]
<%= %> nozīmē, ka šajos tagos ietvertā darbība izvada kādu informāciju.
Tas ir parasts cikls, kas izvada skatā katra topika nosaukumu un saturu (title un content ir tabulas kolonu nosaukumi, tiem, protams, nav obligāti jābūt tādiem). Svarīga lieta ir tāda, ka skatā nebūs ietverts viss web-lapas noformējums vai pārējie elementi. Skats atbild tikai par savu konkrēto uzdevumu – parādīt kontroliera apstrādātos datus. Par web-lapas izkārtojumu atbild Layout. Tas ir cieši saistīts ar skatiem. Layout failā apraksta web-lapas statisko daļu, kura nemainās, piemēram, < div > < / div > izkārtojumu un pārējās lietas. Kādā veidā layout saņem dinamisko informāciju? Tam ir paredzēta speciāla koda rindiņa [b]<%= yield %>[/b], ko ievieto layout failā tajā vietā, kur vēlas, lai tiek attēlota web-lapas dinamiskā daļa. Yield arī saņem skatu ģenerēto dinamisko informāciju.
[b]Kā sākt darbu ar RoR?[/b]
Rails var bez maksas ielādēt no oficiālās lapas, bet es iesaku tiem, kas grib tikai izmēģināt šo tehnoloģiju, lejupielādēt Instant Rails, kas iever sevī Ruby, Rails, MySql un Apache web-serveri. Instant Rails nav jāinstalē, pietiek tikai atarhivēt. Darbs ar RoR notiek ar komandrindas palīdzību. Lai izveidotu jaunu projektu, Rails konsolē ir jāraksta
[q]rails mans_projekts[/q]
Rezultātā tiks izveidots jaunās web-lapas „skelets”. Rails uztaisīs daudz dažādu mapju un failu, par kurām iesācējs var arī neko nezināt. Sākumam pietiek zināt tikai dažu mapju saturu:
[b]config[/b] – šajā mapē glabājas svarīgais database.yml fails, kurā jānorāda datu bāzes un tām pieslēgšanās opcijas, lai Rails varētu pilnvērtīgi strādāt.
[b]app[/b] – svarīgākā mape, kurā tad arī atrodas modeļi, kontrolieri un skati. Veidojot web-lapu, gandrīz visas darbības tiek veiktas tieši ar failiem, kuri atrodas šajā mapē.
[b]public[/b] – mape satur JavaScript un CSS failus.
Tālākās darbības komandrindā ir iespējamas šādas:
[q]ruby script/generate Model Topic[/q]
/* tiek izveidots jauns modelis Topic, tā fails tiek ievietots mapē app/models */
[q]ruby script/generate Controller Topic[/q]
/* tiek izveidots jauns kontrolieris Topic, tā fails tiek ievietots mapē app/controllers */
Vēl noderīga RoR lieta ir scaffolding. Scaffold ir tāda sagatave, kura izveido interfeisu un pamat funkcijas kādam modelim.
[q]ruby script/generate scaffold Topic[/q]
/* modelim tiks izveidots kontrolieris un skats ar pamat darbībām, ko var veikt ar topiku.Vienkāršāk runājot, mēs iegūsim HTML lapu, kurā jau būs gatava forma, ar kuras palīdzību mēs varēsim dzēst, labot, izveidot jaunu topiku. Visas izmaiņas arī tiks saglabātas datu bāzē */
[b]Kopsavilkums.[/b]
Protams, ar šajā rakstā sniegto informāciju ir par maz, lai izveidotu pilnvērtīgu dinamisku web-lapu, bet RoR apgūšana nav iespējama bez zināšanām par MVC. No personīgās pieredzes varu pateikt, ka zinot RoR pamatlīmenī, var izveidot pilnvērtīgu blogu ar komentēšanas un administrēšanas iespējām par nieka 2 stundām. Kaut arī RoR daudz ko izdara programmētāja vietā, nenāks par ļaunu zināt, kā viss „tur apakšā” notiek.
RoR nav vienīgā MVC izstrādes vide. Pastāv arī citi ietvari, piemēram, PHP on Trax, Agavi, Catalyst u.c. Pilnu sarakstu var izlasīt [url= http://en.wikipedia.org/wiki/Model_view_controller]Wikipēdijā[/url].
[i]Noderīgas saites.[/i]
[url=http://www.rubyonrails.org/] RoR oficiālā mājaslapa[/url]
[url=http://instantrails.rubyforge.org/] Instant Rails mājaslapa[/url]
[url=http://www.ruby.lv/]Latvijas forums par Ruby[/url]
[i]Informācija apgūšanai.[/i]
[url=http://fairleads.blogspot.com/2007/12/rails-20-and-scaffolding-step-by-step.html]Ļoti laba RoR 2.0 pamācība[/url]
[url= http://api.rubyonrails.org/]RoR dokumentācija[/url]
[url= http://en.wikipedia.org/wiki/Relational_database] Relāciju datu bāzes[/url]
[url=http://en.wikipedia.org/wiki/Object-oriented_programming]Objekt-orientētā programmēšana[/url]
[url= http://www.whoishostingthis.com/resources/ruby-on-rails/]Ruby valodas pamācība[/url]
[url=http://www.onlamp.com/pub/a/onlamp/2005/01/20/rails.html]RubyOnRails pamācība[/url]
[i]Izmantotais uzziņas līdzeklis[/i]
http://en.wikipedia.org/wiki/Model_view_controller