Datuve :: Ruby On Rails jeb web izstrāde vairs nekož!

Datuve

Mana Datuve

Reģistrācija | Noteikumi | Paroles atjaunošana



Forums

Ieskaties


Raksti

Lietotāji online

Lietotāji online: 42

Reģistrētie lietotāji online: 0

Viesi online: 42

Datuve.lv video
Top.LV

Ruby On Rails jeb web izstrāde vairs nekož!

Ievietoja: bombtrack @ 2008.02.23 23:19  

Kas ir Ruby?
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.

Kas ir Rails?
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).

Kas ir Model?
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.

Model labumi.
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ā:

validates_uniqueness_of :user_name



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:

validates_presence_of :email



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:

has_many :topics



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:

author.topics



Līdzīgi definēsim arī topika asociāciju ar autoru:

belongs_to :author



Tagad varēsim uzreiz noskaidrot konkrēta topika autoru, izmantojot topic.author 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.


Kas ir Controller?
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.

Controller labumi.
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!

Topic.find(:all)



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).


Kas ir View?
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ī.

View labumi.
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:

<% for t in @topics %>
<%= t.title %>
<%= t.content %>
<% end %>



<%= %> 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 <%= yield %>, 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.

Kā sākt darbu ar RoR?
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

rails mans_projekts



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:

config – š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.

app – 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ē.

public – mape satur JavaScript un CSS failus.

Tālākās darbības komandrindā ir iespējamas šādas:

ruby script/generate Model Topic


/* tiek izveidots jauns modelis Topic, tā fails tiek ievietots mapē app/models */

ruby script/generate Controller Topic


/* 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.

ruby script/generate scaffold Topic


/* 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ē */

Kopsavilkums.
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 Wikipēdijā.

Noderīgas saites.
RoR oficiālā mājaslapa
Instant Rails mājaslapa
Latvijas forums par Ruby

Informācija apgūšanai.
Ļoti laba RoR 2.0 pamācība
RoR dokumentācija
Relāciju datu bāzes
Objekt-orientētā programmēšana
Ruby valodas pamācība
RubyOnRails pamācība

Izmantotais uzziņas līdzeklis
http://en.wikipedia.org/wiki/Model_view_controller

Saistītie raksti

Komentāri

#1 Interesanti @ 2008.02.23 23:53

Paldies par rakstu

#2 Arābs @ 2008.02.24 00:40

Interesanti

#3 anoniiims @ 2008.02.24 00:45

da blee ietvarčaula ? WTF ?

#4 jii @ 2008.02.24 01:38

Paldies! Šis noderēs! :)
Vēl foršāk būtu, ja kāds piemērs tiktu analizēts, lai var jau sākt iemēģināt.

#5 mkz @ 2008.02.24 08:02

pilns internets ar piemēriem

#6 pentiums WWW @ 2008.02.24 08:59

Es palieku pie PHP un HTML

#7 kasix WWW @ 2008.02.24 09:02

un pareizi dari. šis izskatās tik garš pieraksts. :) btw html jau paliek pats par sevi, tur nekas cits nevar vnk atrasties. Itkā :D

#8 king999 @ 2008.02.24 10:53

Izskatās, jau interesanti, bet tomēr, labāk iemācīties php, kaut gan šito ar drīz papētīšu

#9 mefisto @ 2008.02.24 12:01

Nuuu .. mācīties PHP kā pirmo valodu ir kļūda. Liela kļūda.
Tas ir kā smadzeņu lobotomija.

#10 useris @ 2008.02.24 12:11

mefisto rakstīja:

Nuuu .. mācīties PHP kā pirmo valodu ir kļūda. Liela kļūda.
Tas ir kā smadzeņu lobotomija.

Pamato, lūdzu! Es, piemēram, sāku ar PHP un pāriet uz C++ nesagādāja nekādas problēmas. Piekrītu, ka PHP palīdz neiemācīties rakstīt efektīvu kodu, bet tik un tā domāju, ka tā pagaidām ir viena no vieglāk apgūstamajām un ražīgākajām (patērētais laiks/iegūtais rezultāts) valodām.

#11 bombtrack @ 2008.02.24 12:48

Tiem, kuriem interesē, var praktiski pamēģināt kaut ko izveidot ar RoR. Raksta beigās pie saitēm pievienoju saiti "Ļoti laba RoR 2.0 pamācība".

#12 mefisto @ 2008.02.24 13:20

#
Useris :
- php nav objektorientēts (tās dļas kas ir , veidotas pēc idejas "nu mēs mēģinājām, bet tjipa nesanāca"),
- valoda datu tipu .. emm .. attiecības ir neloģiskas.
- tādi brīnumi kā magic_quotes un safe_mode ir vienkārši šausmas.
- utf8 atbalsta NAV. Tas kas tur ir , nav utf8 atbalsts, tā ir parodija.
- protams funkciju nosaukumi nekad neveidojas pēc vienota  principa. Ņem un mini, vai bija 'htmlspecialchars() ' vai tomēr 'html_special_chars() ' .

bombtrack: es zinu ka tā drošvien ir nedzirdēta un šokējoša ideja, bet vai tiešām nevajadzētu pa priekšu apgūt Ruby, pirms ķera pie RoR ?!

#13 bombtrack @ 2008.02.24 13:27

Zini, mefisto, bet nē. Es uzreiz sāku ar RoR, jo Ruby kodu tur ir ļoti maz jāraksta (vismaz primitīvai web-lapai). Nu jā, tas arī pie nosacījuma, ka ir kāda nojausma par programmēšanu kā tādu, tad atliek tikai paskatīties Ruby sintaksi noteiktām konstrukcijām. Un arī nav lielas jēgas rakstīt rakstu par to, kā apgūt Ruby valodu vai arī par to, kas ir programmēšana...

#14 mefisto @ 2008.02.24 13:32

.. liekas kāds šeit mēģina padarīt RoR par jauno FrontPage.

#15 bombtrack @ 2008.02.24 13:37

Tā gluži nav. Vispār raksta jēga ir iepazīstināt ar MVC uz RoR piemēra.

#16 Motoriņš @ 2008.02.24 14:57

Piekrītu mefisto. bombtrack, tikpat labi primitīvai weblapai jāraksta maz php. Nu bet tie kas izmantos, tie jau zinās labāk.

#17 zZzz @ 2008.02.24 16:26

Pats es darbojies kādu laiku ar RoR. Kopumā daudz ko viegli var uz taisit, ja zini ko dari, bet, lai uzzinātu kā to darīt dažreiz var norauties nedēļām. Ļoti mazs pieejamas informācijas daudzums, pieejami tikai pamata piemēri, bet kad vajag ko specifiskāku vari nošauties mēģinot atrast/izdomāt.

#18 MKwar @ 2008.02.24 16:43

Tieshi tas ko mekleeju paldies !!!

#19 fest WWW @ 2008.02.24 17:22

Istenībā daļēji piekrītu mefisto apgalvojumam, ka nevajadzētu sākt mācīties ar PHP. Kā vienu no iemesliem varu nosaukt kaut vai to, kādas tēmas tagad tiek veidotas php.lv/f. Tur katra otrā tēma ir tāda, kurai ar PHP nav nekāda sakara. Cilvēks nevar loģiski izdomāt, kādas darbības ir jāveic, lai rezultāts sanāktu tāds un tāds. Un protams gaida, kad viņa vietā kāds uzrakstīs kodu.
PHP lielākie mīnusi manuprāt ir jau pieminētā funkciju nosaukumu dažādība. IMHO web lapām tur nav vajadzības izmantot ūbersarežģītu OO kodu. Pilnībā pietiek ar PHP OOP fīčām.
Taču šķiet, ka ne man vienīgajam nāk raudiens skatoties uz kodu, a la:
echo nl2br("$foo");

P.S. Autoram cepums par centību. Ieteikums nākamajam rakstam- aprakstīt reālu aplikāciju iz dzīves.

#20 ieviesis @ 2008.02.24 18:48

vai pastāv latviešu RoR, community, forumi, vai kas tamlīdzīgs?

#21 /dev/kashkis @ 2008.02.25 14:03

lativjaa peec buutibas naf pa speekam  OO bazeeta izstraade   un taapeec 100% varu teikt- ROR naf shai valstij ! aizmirstiet ! tas naf jums !
> 19. echo nl2br("$foo");
tas ir tieshi tas par ko runaaju un taapeec  tu ar savu domaashanu netiksi liidz ROR !

#22 useris @ 2008.02.25 16:29

fest rakstīja:

Istenībā daļēji piekrītu mefisto apgalvojumam, ka nevajadzētu sākt mācīties ar PHP. Kā vienu no iemesliem varu nosaukt kaut vai to, kādas tēmas tagad tiek veidotas php.lv/f. Tur katra otrā tēma ir tāda, kurai ar PHP nav nekāda sakara. Cilvēks nevar loģiski izdomāt, kādas darbības ir jāveic, lai rezultāts sanāktu tāds un tāds.

Nekāda sakara ar fleimu par valodām, bet vai, Tavuprāt, cilvēkam pazudīs problēmas ar sakarīgu loģiku, ja viņš mācītos kaut vai Ruby nevis PHP?

#23 fest WWW @ 2008.02.25 22:04

useris, tieši to es gribēju pierakstīt savam postam, taču bija jāskrien.
Vienīgi, lielākā daļa PHP tutoriāļu, ko esmu redzējis, ir tieši par PHP valodas īpatnībām, nevis programmēšanu vispār. Jauniņie jau neaizdomājas palasīt, kas vispār ir programmēšana- viņiem ir svarīgs ātrs rezultāts.
Turpretī OO valodām tutoriāļos vairāk esmu manījis atsauces par programmēšanu in general. Nezinu, varbūt tas ir tīri subjektīvs viedoklis. It kā jau nav atšķirības vai cilvēks kodē Paskālā, Beisikā, PHP, C vai jebkurā citā valodā, kamēr vien viņš saprot ko dara, domā loģiski un zin valodas ierobežojumus.

#23: tu vispār manu komentāru izlasīji? Vai tikai ieraudzīji vienu rindiņu, un nu kliedz, ka man ir greiza domāšana un es nesaprotu OO principus?

#24 Kiwi @ 2008.02.25 22:21

Neakarīgi no valodas vaina jau nav pašās valodās, bet cilvēkos kas to lieto. PHP ir lieliskas iespējas veidot labi strukturētu, loģisku, stabilu, konsistentu un visādi citādi labu izejas tekstu. Nelaime jau ir faktā, ka ļoti reti PHP programmētāji vai tie, kas sevi par tādiem uzskata vispār tiek pāri pāris funkciju definēšanas līmenim un palasa kaut ko par OOP iespējām, projektēšanas šabloniem un citām būtiskām lietām.

RoR būtībā jau ir būvēts balstoties uz objektorientēto ideloģiju, tāpēc arī atsevišķiem cilvēkiem viss liekas tik ērti saprotami un pārdomāti. Nelaime ir faktā, ka pārbīdot stulbos (atvainojos par izteicienu) PHP programmētājus uz RoR nekas būtībā nemainīsies. Nomainīsies vien lamājamā izstrādes vide. Arī RoR var savārīt ziepes, es ticu, ka pat lielākas par tām, ko var izdarīt ar PHP. Vienīgā būtiskā atšķirība ir tā, cik kuru no tehnoloģijām lieto un kāds ir šo cilvēku zināšanu līmenis. RoR komūnai par labu pagaidām iesācēji šajā virzienā pārāk neskatās, jo ar PHP iesākt ir vienkāršāk - apkārt ir vairāk zema līmeņa "speciālistu", kas "iemāca" programmēt PHP.

Ja atgriežamies pie raksta - domāju, ka pat ļoti ok. Ir jāparāda tautai, ka ir izvēles iespējas un RoR noteikti nav no sliktākajām izvēlēm.