Kako početi učiti ruby ​​on rails. Zašto je Ruby on Rails jedan od najboljih među prvim programskim jezicima za dizajnere

Dugo sam želio naučiti Ruby on Rails na nekom osnovnom nivou. Bez određenog cilja. Radije, samo za sebe, kako bih bolje razumio šta je tu toliko posebno (za razliku od 100.500 drugih tehnologija i okvira), što vam omogućava da brzo kreirate i skalirate prilično opterećene internet projekte. Sekundarni razlog je bila želja da se isprobaju novi pristupi učenju. Dok sam studirao za programera, imali smo samo knjige i forume da tražimo savjet. Sada postoje interaktivni tutorijali i online škole za programere, ogroman broj screencasta (skoro san: gledanje programa gurua), baze znanja poput stackoverflow.com i tone izvornih kodova na GitHubu, gdje možete provesti sate proučavajući izvorni kod pravi profesionalci. Sljedećih nekoliko noći (a danju nema vremena) odlučila sam izdvojiti da isprobam nove načine učenja na djelu.

Prva noć

Početi učiti Ruby on Rails bez čak i minimalnog znanja o samom Rubyju bilo bi čudno. Već sam preuzeo interaktivni vodič ruby-lang.org. Ali kako je prošao, odmah je sve zaboravio. Njegovi kreatori obećavaju da će biti potrebno petnaest minuta da se prođe i savlada Ruby sintaksa. Trebalo mi je trideset. Istina, uz stalno ometanje na Twitteru. Proces izgleda otprilike ovako. Kažu vam: „Nizovi u Rubyju su deklarisani ovako, a podaci iz nizova se preuzimaju ovako. Pokušajmo sada napraviti niz i izdvojiti N elemenata iz njega. I provjerit ćemo." Pročitate kako sve funkcionira i odmah isprobajte. Naravno, ne možete tako naučiti Ruby. Bolje je razmišljati o tome kao o super ekspresnom kursu koji funkcionira. Ipak, sam Ruby je daleko od okvira Ruby on Rails. Želeo sam da savladam upravo šine. Iz našeg članka o online obrazovanju, definitivno sam se sjetio senzacionalnog kursa Zombie for Rails railsforzombies.org. To je isto kao Try Ruby, interaktivni tutorijal koji vas počinje učiti kako odmah pripremiti željezničke aplikacije. Prvo vam pročitaju mini predavanje (na engleskom, ali sve je vrlo jasno - uključite titlove) o strukturi fajlova željezničke aplikacije, CRUD pristupu za rad sa podacima, objašnjavaju kako se MVC model implementira u šine , i tako dalje. Nakon svakog videa, od vas se traži da izvršite zadatke za konsolidaciju materijala. Sve izgleda jednostavno i jednostavno, staza proleti nezapaženo za sat-dva (mala je). Ali! Da li sam nakon kursa osjetio da mogu napisati aplikaciju za željeznicu? Nažalost nema!

Druga noć

Jedan od razloga zašto se neko osnovno znanje pojavljuje nakon Rails for Zombies, ali nema sigurnosti, je virtuelno okruženje u kojem se učenje odvija. S jedne strane, smanjuje ulazni prag do granice: ne morate brinuti o okolišu. S druge strane, usput ne stvarate ništa stvarno – nema “Hello World” na kraju. I što je najvažnije, nije jasno s koje strane pristupiti njegovom stvaranju. Od tog trenutka želeo sam da isprobam Ruby on Rails u praksi, da ga zapravo instaliram na sistem (pre toga niste mogli ni da pokušate) i da kreiram jednostavnu aplikaciju od nule. Ne sećam se kako, ali sasvim slučajno sam naišao na veoma uspešan kurs screencast-a na ruskom rails.hasbrains.org. Hvala autoru na kompetentnoj prezentaciji: metodično detaljno objašnjava principe primjene šine, uranjajući vas u sve potrebne suptilnosti na tom putu. Ukratko, druge večeri eksperimenta odgledao sam prvu polovinu od preko trideset epizoda ovih screencasta. Slika o tome kako se generira aplikacija, kako se radi sa željezničkom konzolom, kako kreirati modele i migracije, kako ažurirati modele i kako provjeriti podatke u njima, RESTful kontrolere i tako dalje, konačno je fiksirana u mojoj glavi. Gledajući svaku od epizoda, odmah sam isprobao sve na djelu, praveći potpuno funkcionalnu željezničku aplikaciju. Postalo je jasno kako su šine u principu raspoređene.

Treća noć

Treće večeri su ostale posljednje epizode screencasta koje sam uspio pogledati u jednom dahu: rad sa šinama više nije djelovao tako divlje. U ovom trenutku, neko mi je rekao da kurs Rails for Zombies ima razuman i mnogo dublji nastavak. Istina, kurs je već plaćen i hostuje ga Code School www.codeschool.com. Nije bila šteta dati 25 dolara za pristup svim predmetima škole. Ovo je mjesečni trošak, pa ako vam se ne sviđa, ne zaboravite otkazati pretplatu. Kurs Rails for Zombies 2 zaista se pokazao vrlo uspješnim. Istina, mnogo toga je postalo ponavljanje onoga što sam vidio na screencast-ovima - ali čak je bilo i ugodno. Pet nivoa i pet blokova vježbi koje radite direktno u interaktivnoj konzoli. Do ovog trenutka, šine su se već činile logičnim, razumljivim i upotrebljivim. U Code School možete programirati direktno u pretraživaču ispunjavanjem zadataka iz kursa

Šta je sledeće?

Da li sam naučio da radim složene projekte? br. Ali definitivno sam shvatio pristupe korištene u šinama i shvatio njihovu pogodnost. Naučio sam kako brzo kreirati jednostavne aplikacije i u super kratkom vremenu povećati njihovu funkcionalnost koristeći dragulje koje je napisala zajednica. Skupio sam hrabrost i onda sam sretan što sam naučio najbolje prakse u programima Code School (sada gledam kurs o jediničnim testovima). I tako sam prokleto srećan što je tehnologija postala tako laka za učenje.

Mnogi moji kolege programeri laskavo govore o Rails-u, ali nisam mogao da shvatim zašto. Šta je Rails i kako se zapravo razlikuje od Ruby on Rails? Koliko je teško naučiti? Da li je to uopšte programski jezik? Šta trebam znati prije nego što naučim Ruby on Rails?

Ova i mnoga druga pitanja su mi se stalno vrtjela u glavi, ali, kako se pokazalo, nisam jedini. Ovo pitanje je zanimalo i naše čitaoce, pa sam, kako bih saznao više o tome, odlučio jednom od svojih kolega postaviti nekoliko osnovnih pitanja o Rubyju. Ovako je nastao ovaj članak.

Spreman si? Idi!

13 činjenica o Ruby on Rails - šta trebate znati?

1. Šta je Rails?

Rails je okvir web aplikacije koji je napravljen za pisanje Ruby koda. Zvuči zbunjujuće, zar ne?

Pokušajmo ponovo. Postoji programski jezik Ruby. Zadovoljstvo je pisati na njemu. Inače, osoba koja ga je kreirala rekla je da mu je glavni cilj stvaranje jezika koji će učiniti život programerima boljim. Zar to nije divno?

Dozvolite mi da vam dam primjer.

Ako želim da prikažem tekst na ekranu u PHP-u, moram da pišem

eho “Hello World”;

Vidite tačku i zarez? A ovaj "eho" - šta to uopšte znači?

S druge strane, ako trebam da uradim isto u Ruby-u, morat ću napisati sljedeće:

stavlja "Hello World"

Bez tačaka i zareza, i dok "puts" može izgledati malo tinejdžerski, smatram da je logičnije od "eho". Kada satima pišete kod, tako mali detalji igraju VELIKU ulogu.

Jedini problem s Rubyjem bio je taj što nije dizajniran za izradu web aplikacija. Odnosno, nećete moći na njemu kreirati web stranicu, na primjer. To je bilo prije Railsa. Nisam siguran da li je Rails bio prvi web framework za Ruby, ali je DEFINITIVNO najpopularniji.

Misija Railsa je da obezbedi okvir i mogućnosti koje bi vam omogućile da napravite Ruby aplikacije, kao što je veb lokacija. Za sada zvuči prilično mutno, pa ću pokušati ovako da objasnim. Ako sam napisao

stavlja "Hello World"

tada biste u HTML dokumentu vidjeli cijeli tekst. Ali želim da vidite SAMO ovo:

Zdravo svijete

Jednostavno rečeno, Rails vam to omogućava. Ali to nije sve.

2. Šta je Ruby on Rails?

Ruby on Rails je PUNI službeni naziv Rails frameworka. Ali u razgovoru, programeri obično ne kažu prvi dio, već ga jednostavno zovu Rails. Dakle, ako želite da budete “na vrhu” i da izgledate tehnološki pametni, svakako biste to trebali nazvati Rails, ali ZAPAMTITE šta znači ovaj prvi dio – “Ruby on”.

3. Čuo sam da je Rails odličan za početnike. Zašto?

Postoji nekoliko razloga zašto je Rails odličan za početnike. Prvi je da je sam Ruby jezik zaista dobar za početnike, a ovo je prvi plus. Mnogo je lakše naučiti pisati kod na Ruby-u nego na drugim jezicima, jer je jezik prilično fleksibilan i liberalan, što će vam uštedjeti živce i omogućiti vam da više vremena posvetite učenju osnova programiranja.

Zašto je Rails tako ugodan za početnike? Jednostavno je vrlo stabilan i radi OGROMAN nivo posla za vas.

Za mene je rad u Rails-u kao vožnja teretnog kamiona. On je neverovatno moćan, samo pogledajte - vozite kamion !!! Međutim, znate li dobro kako funkcionira auto koji vozite?

Činjenica da je Rails odgovoran za toliko zadataka, obavljajući ih umjesto vas, omogućit će vam da odmah budete zadovoljni. veliki iznos cool pogodnosti. Međutim, ponekad može igrati protiv vas, ako ponekad prestignete sebe i ne naučite u potpunosti osnove koje jednostavno morate znati.

Iz tog razloga, veoma je važno naučiti Ruby on Rails od nule. Ono što je najvažnije, morate biti sigurni da vam je Ruby zaista ugodno. U suprotnom, izaći ćete iz ovog kamiona na pola puta i reći sebi: "Čekaj, jesam li ja stvarno krenuo na ovu stvar?"

4. Kako se Rails razlikuje od Ruby programera?

Tehnički, razlika je u tome što će čisti "Ruby programer" kreirati aplikacije u Ruby-u, ali ne i na Rails-u. Iako se to, po pravilu, ne dešava. Svakako je moguće kreirati Ruby web aplikacije koristeći druge okvire kao što je Sinatra, ali kladim se da 99% vremena vjerojatno nećete biti angažirani kao Ruby programer. Stoga, ionako morate naučiti Rails.

5. Koliko dobro trebam znati Ruby? Šta treba da naučim prije početka treninga?

Postoje različita mišljenja o ovome, ali slijedeći primjer velikog kamiona, mislim da bi se trebali osjećati samopouzdano radeći s Rubyjem kako biste dublje ušli u Rails. Kao što je, recimo, bolje prvo naučiti voziti bicikl, prije nego pređete na putnički automobil, pa onda razmišljati o tome kako voziti kamion.

A evo još jedne stvari. Puno vremena pri radu u Rails-u će se potrošiti na pisanje Ruby koda. Iz tog razloga, morate vrlo dobro poznavati ovaj jezik, posebno njegove osnove: tipove podataka, metode, objektnu orijentaciju, otklanjanje grešaka i još mnogo toga. I ne morate biti super iskusan Ruby programer – samo se morate osjećati samopouzdano kao riba u vodi kada radite s njim.

6. Zašto bih trebao naučiti Rails? Šta ga čini posebnim?

Odličan je i jednostavno nevjerovatan. Šta još trebate znati? Kada se Rails prvi put pojavio, to je bilo pravo otkriće i dostignuće u umjetnosti dizajna. Uz najbolje prakse koje su uzete u obzir prilikom njegovog kreiranja, Rails vas praktično vodi na putu pisanja sjajnog koda, čak i ako to ne želite (ili ne znate kako to učiniti).

Ako želite izgraditi robusne web aplikacije koje rastu po potrebi i koje je lako održavati u budućnosti, Rails je odlična opcija. Osim toga, popularan je kod mnogih cool kompanija. Posljednji veliki razlog zašto je Rails toliko popularan među startupima je taj što je odličan za brzo ruganje. Za samo nekoliko sati možete dizajnirati, izgraditi i pokrenuti Rails aplikaciju koja vam je potrebna. U stvari, postoji vrlo malo drugih okvira koji bi to mogli podnijeti.

7. Šta možete stvoriti pomoću Railsa?

Šta želite da kreirate? Rails je pogodan za bilo koju web aplikaciju. Za brzu referencu, pogledajte ove sjajne primjere lokacija koje pokreće Rails: Hulu, Airbnb i Basecamp.

8. Mogu li kreirati Rails mobilne aplikacije?

Da i ne. Nećete moći da pravite mobilne aplikacije u Railsu, ali u Railsu definitivno možete kreirati web aplikaciju i koristiti je kao back-end za mobilna aplikacija.

Tu je i alat pod nazivom RubyMotion, koji olakšava kreiranje izvornih iOS i Android aplikacija u Rubyju (ali ne i Rails). To jest, nećete SPECIFIČNO koristiti Rails za kreiranje mobilne aplikacije za Prodavnica aplikacija ali Rails definitivno može biti važan dio vašeg mobilnog projekta. Nadamo se da je slika sada jasnija.

9. Ruby on Rails - Kakav posao mogu dobiti?

Rails je trenutno jedna od najtraženijih vještina, tako da postoji širok raspon kompanija za rad. Rails posebno vole startupi kao što je Zearn. To je start-up, neprofitna obrazovna IT kompanija. Možete odabrati i veću kompaniju poput Bloomberga i učestvovati u razvoju web stranica i aplikacija koje koriste milioni korisnika. Freelancing je također dobra opcija za Rails programere. Budući da ste nezavisni, moći ćete da birate u kojim projektima želite da učestvujete: malim i kratkoročnim ili ozbiljnim i dugoročnim.

10. Probao sam drugi programski jezik, ali mi se nije dopao. Da probam Rails?

Želim još jednom da naglasim - Rails zapravo nije programski jezik, već okvir. Ako ste se pitali ima li smisla pokušavati zavoljeti programski jezik uopće, mogu reći samo jedno - Ruby je najcjenjeniji i najomiljeniji programski jezik među korisnicima na svijetu. Tako da ne bih otpisao programiranje dok ne isprobate Ruby.

11. Mogu li naučiti JavaScript zajedno sa Railsom?

Umjesto toga - ne. Dodatno - Nesumnjivo.

Rails programer će morati naučiti JavaScript (). Ovo nije uslov za učenje Railsa, ali je vještina koja će vam trebati dok učite.

Da budem iskren, kako postupno uronite u područje tehnologije, počet ćete shvaćati da ćete morati imati prilično veliki broj vještina (u stvari, to znači da svi moraju težiti da budu Full-Stack programeri) . Na sreću, kako budete sticali iskustvo, biće vam lakše da naučite i nove jezike i nove okvire.

Što se tiče toga koji da odaberete - JavaScript ili Rails - reći ću vam otvoreno da ionako ne možete pogriješiti. Čini mi se da je Ruby mnogo lakši za naučiti nego JavaScript. Osim toga, znam mnogo ljudi kojima je JavaScript lakši nakon što su prvi put naučili Ruby. Ali, kao što sam već rekao, sigurno nećete pogriješiti ako učite oboje.

12. Koliko će trajati obuka?

Koliko vremena dnevno ćete morati da potrošite na trening? Mislim da su potrebni mjeseci posebne obuke da bi se dobro shvatio Rails. Ali kao i sa svakom vještinom, potrebne su desetine hiljada sati da postanete Rails profesionalac, tako da je najbolje ne gubiti vrijeme i početi odmah.

Na brzinu učenja u velikoj mjeri će utjecati vaš nivo znanja iz oblasti programiranja općenito. Ali ako ste potpuni početnik, Ruby i Rails vrijedi isprobati.

13. Ruby on Rails - Odakle početi?

Preporučujem da počnete s najboljim Ruby on Rails tečajem dana. Ako u životu niste napisali niti jednu liniju koda, prvo što biste trebali učiniti je pohađati kurs HTML i CSS. Na sreću, kurseve o HTML-u i CSS-u je lako pronaći. Nakon toga, morat ćete naučiti Ruby, Git i komandnu liniju.

Kao dio vašeg nastavnog plana i programa, obično ćete postepeno biti vođeni u Rails tako što ćete vas naučiti kako raditi sa Sinatrom i ActiveRecordom. Ovo vam još ništa ne govori, ali suština je da prije nego vozite taj "kamion" koji sam ranije spomenuo, morate početi sa jednostavnim kursevima vožnje u Railsu.

Najbolja stvar koju možete učiniti dok učite je kreirati vlastiti projekat, raditi na nečemu i razvijati se, shvatiti da se krećete u pravom smjeru i imati dobru podršku! U procesu učenja imaćete milione malih pitanja, a da biste postigli najbolji rezultat, važno je da imate nekoga ko vam može pomoći da to shvatite i predložiti nešto ako imate poteškoća.

Aleksandar je osnivač projekta web stranice „Web Laboratorija uspjeha“, kreiranog za podršku početnicima i stalnim internet poduzetnicima.Uvjereni radoholičar, iza kojeg stoji profesionalno iskustvo vođenja redakcije internet magazina, kreiranja i upravljanja vlastitom internet trgovinom. . Glavno zanimanje: promocija poslovanja (uključujući online trgovine) putem Facebooka i Google Adwordsa. Glavni hobi: monetizacija stranica putem alata za affiliate marketing i Google Adsense. Potvrđen lični rekord: 3 miliona posetilaca bloga mesečno.

Učenje novog programskog jezika može biti dugotrajno i izuzetno dosadno. .Net programeri će sada biti bijesni i uzviknuti: "Zašto bih to uopće naučio, jer sam profesionalni .Net programer, a moj dnevni raspored teško da ću moći da se uguram u proces učenja novog jezik!" Ali ovo će biti krajnje nepromišljena izjava, jer prilikom učenja novih programskih jezika naučite mnogo novih i korisnih stvari, posebno ako je ovaj jezik ažurirana verzija prethodno postojećeg drugog jezika. Ruby je upravo ovaj tip jezika. Slažem se da je proces prelaska od programera početnika do profesionalnog u okviru programskog jezika najteži proces, ali iskustvo je vrijedno toga. Sada mogu samo da vas obavestim o novostima, i siguran sam da definitivno nećete želeti da prestanete. Polako!

Napomena: Imajte na umu da je ovaj članak samo površan uvod u Ruby (programski jezik) i Rails (platformska aplikacija). Glavni cilj je da vas upozna sa Ruby-jem i da vas motiviše da dobijete poticaj koji je potreban za početak. novi jezik programiranje.

Šta je Ruby?

Ruby je, kao što je spomenuto, ažurirana kombinacija različitih programskih pristupa. Ruby je odličan spoj Python-ovog pristupa toka rada koji je lako razumljiv, sofisticiranosti Smalltalka i laganog stila koji ide uz razvoj Perl-a. Ruby je visok nivo objektno orijentisanog programiranja (kao što je slučaj sa većinom drugih programskih jezika danas), koji je započeo sredinom 90-ih u Japanu. Vremenom se Ruby proširio na Sjedinjene Države i Evropu.

Ruby je poznat po svom dinamičkom sistemu tipova i automatskoj alokaciji memorije. Pod dinamičkim tipom, mislim da se većina tipova provjerenih u Ruby programu izvršava pri pokretanju, što znači da ne morate brinuti o tipovima cijelih ili malim slovima. Ruby to radi za tebe. Videćemo to mali primjer kasnije.

Glavni cilj pokretanja Rubyja bio je olakšati ljudima interakciju s mašinama i razumijevanje koda. Osnivač Ruby-ja, Yukihiro Matsumoto, insistira na ideji da je Ruby dizajniran da poboljša produktivnost programera, a ne da optimizuje aplikaciju sa strane mašine.

„Često se ljudi, posebno kompjuterski inženjeri, fokusiraju na mašine. Smatraju da je na taj način moguće ubrzati rad mašine, povećati njenu efikasnost, da je moguće poboljšati sve, sve, sve u vezi mašine." Zapuše se na mašine. Ali u stvarnosti, svoju pažnju trebamo usmjeriti na ljude, brinuti o njima, olakšavajući proces rada sa aplikacijama putem mašina. Mi smo stvarni i živi, ​​a mašine nas samo slušaju.

Šta je Rails?

Rails je nevjerovatno produktivna platformska aplikacija koju je napisao David Heinemeier Hansson na Ruby-u. Očekuje se da će razvoj Rails web aplikacija biti 10x brži od platforme zasnovane na Javi. Rails je okvir otvorenog koda (naravno!) zasnovan na Rubyju koji možete koristiti za brzu i laku integraciju vaše baze podataka.

Rails je poznat po izuzetno prvoklasnim idejama koje su omogućile različite nove pristupe programiranju i stvaranje dinamičkog programskog okvira. Glavni kod aplikacije i ažurirana baza podataka uvijek će uključivati ​​sva potrebna Ruby svojstva za pokretanje programa od početka do kraja.

Redovni Ruby program

Da vidimo kako su stvari jednostavne i zanimljive nakon toga:

kod:
lično = "Ne volim svoju djevojku"
stavlja lični
na izlazu:
Ja ne volim svoju devojku
Da da! Bez inicijalizacije, bez tačaka i zareza i bez metoda.

Pokušajmo sada vidjeti razliku između PHP-a i Ruby-ja koristeći primjer slučaja kada trebamo obrnuti niz:

PHP:
strrev (“string”);
rubin:
“String” .obrnuto
Voila! Praktično ne trošimo vrijeme i potpuno obrćemo slijed zapisa. Mora se uzeti u obzir razlika u naporima uloženim na oba jezika. Programski jezik baziran na Rubyju uvelike olakšava proces pisanja programa. To više liči na pisanje na engleskom nego na programski jezik. Ovo je budućnost za sve jezike.

Prednosti korištenja Ruby (i Rails)

Svi znaju da je Ruby svijet veoma velik, a danas nismo pokrili ni 1%, ali ovaj unos će vam omogućiti da osjetite moć ovog jezika programiranje i stimulisaće vas da sami počnete da ga upoznajete. Sada zaronimo u svijet Ruby prednosti:

* Dostupnost... Kao što je ranije rečeno, ovo je jedna od glavnih prednosti Rubyja. Kao programski jezik, Ruby je veoma rafiniran i veoma sličan engleski... Sličnost sa uobičajenim govornim jezikom omogućava početnicima da se lako naviknu na rad sa Rubyjem.

* Konciznost i moć... Gornji primjer nam pokazuje koliko je koncizan Ruby kod. Ono je što je moguće sažetije. Osim toga, Ruby je jezik moćan koliko i drugi jezici mogu biti, jer je objektno orijentirani programski jezik visokog nivoa.

* Nema potrebe da ponovo izmišljate točak... Rails (bazirani na Rubyju) je jedno programsko sučelje s kojim više ne morate izmišljati točak. Generiše kod koji se može koristiti više puta u različitim slučajevima.

* Ugrađeno testiranje... Rails je popularan zbog svoje sigurnosti i popravljivosti. Platforma će vas snabdjeti moguće opcije pisanje koda, što će uvelike olakšati proces razvoja. Takođe, Rails pruža neke jednostavne testove koji se mogu proširiti po želji programera.

* Dev, Test i Prod okruženja... Rails vam omogućava da pokrenete svoj projekat u tri različita okruženja pod nazivom Dev, Test i Prod. Sva tri okruženja se ponašaju malo drugačije.

Izbor

Sada pogledajmo neke od (popularnih) web stranica koje su razvijene pomoću Ruby alata. Vidjet ćete koliko su pametni dizajneri u upravljanju svojim projektima s Rubyjem.


02.


03.


04.


05.


06.

Glavna zasluga bilo kojeg web dizajnera je da može razumjeti - pa čak i organizirati - šta se događa iza kulisa.

U najmanju ruku, trebali biste uzeti neke lekcije programiranja. Ne govorim o front-end jezicima kao što su HTML i CSS - vjerovatno već znate dosta toga. Govorim o back-end stvarima.

Ako znate kako postaviti temelje, onda možete bolje razumjeti kako dizajnirati ostatak stranice. Poenta je da će vas učenje programiranja učiniti erudiiranijim dizajnerom. Osim toga, tko ne bi želio zaposliti dizajnera koji zna sve, od dizajna do izrade web stranica?

Trik je u odabiru mjesta za početak. Učenje programiranja može biti težak proces, posebno ako odaberete jedan od težih jezika poput C++ ili PHP.

Dakle, odakle je najbolje početi? Postoji samo jedan odgovor: Ruby on Rails je jedan od najboljih programskih jezika i okvira za učenje osnova dizajna.

Zašto je Ruby najbolji izbor?

Za početnike, Ruby je jedan od najlakših jezika za učenje, posebno ako imate HTML ili CSS iskustvo koje ima većina dizajnera.

Jedan od prvih programa koji ćete raditi kada počnete učiti jezik je zloglasni Hello World, koji uključuje prikazivanje ovih riječi na ekranu.

Sa jezicima kao što je C++, može postojati od pet do sedam linija koda samo za prikaz te dvije riječi. Ali ako koristite Ruby, postojat će samo jedan red i jedna naredba.

Stavlja "zdravo, svijet!"

To je sve! To je sve što vam treba da unesete riječi "Zdravo svijete!" na ekranu. Prilično lako, zar ne?

Ruby on Rails je takođe veoma suv jezik. Kao jedan od razvojnih principa, DRY (dry) znači „Nemoj se ponavljati“ – to jest, nemojte ponovo programirati element kada možete koristiti onaj koji ste već kreirali. Ovo čini Ruby vrlo laganim i često korištenim programskim jezikom za razvoj, jer je usmjeren na brzo i efikasno dovršavanje projekta.

Ruby ili Rails?

Ruby je programski jezik. Rails je okvir koji koristi Ruby da obavi posao. Ruby on Rails okvir je kolekcija unaprijed izgrađenog ili unaprijed napisanog koda koji može pomoći da se ubrza proces kreiranja novih projekata. Prvobitno je stvoren za razvoj Basecamp alata za upravljanje projektima. Osim Basecamp-a, postoje i druge popularne web aplikacije napravljene sa Rails-om kao što su 500px, ThemeForest i MyFitnessPal.

Kada shvatite kako raditi s Ruby jezikom i natjerate materijal da radi u okviru Ruby on Rails, možete početi graditi web aplikacije.

Ruby je na vrhuncu!

Zahvaljujući eksploziji popularnosti mobilnih uređaja i tehnika koja je uvek u kontaktu, Ruby je sada neverovatno popularna. I vjerovatno će tako biti i u budućnosti. Indeks TIOBE rangira Ruby kao 13. najpopularniji programski jezik. U skladu s novim trendovima, prema Indeed.com, Ruby također doživljava iznenađujuće veliku potražnju.

TIOBE Indeks

U svakom slučaju, šta god da odaberete - potražnju ili popularnost - Ruby je prilično popularan. Ovo ga čini jednim od najboljih mjesta za početak, jer kada jednom naučite jezik, posao možete obaviti prilično brzo. I to prije nego počnete učiti drugi jezik kako biste proširili svoje vještine.

Ruby ima čvrstu osnovu!

Neki drugi jezici su bili prisutni za više, to je istina, ali čak i tako, podrška i dokumentacija blijede u odnosu na ono što je dostupno za Ruby. Drugim jezicima takođe nedostaje društvena kohezija oko jednog okvira koji ima visoku podršku.

Zahvaljujući Ruby On Rails okviru, već postoje tone postojećeg koda koji možete koristiti u svojim projektima. Ruby Gems, biblioteka Ruby okvira, ima preko 600.000 biblioteka koje možete izabrati.

Svaki put kada naučite nešto novo, potrebno vam je puno dokumentacije i podrške. Postoji tona mjesta za pronalaženje edukativni materijali, tutorijale, tutorijale, pa čak i forume za pitanja i odgovore. Ako naiđete na određeni problem, jednostavna pretraga weba će ga vjerovatno riješiti. Važno je.

Jednostavna dokumentacija i lak pristup podršci su neophodni kada učite novi jezik – kada zapravo učite nešto novo.

Ruby "dopušta" veću kontrolu dizajna

Ako ste samo web dizajner, izrada web stranice može biti dugotrajan i složen proces. Kada sjednete da radite s programerom i razgovarate o potrebnom back-endu za vašu web lokaciju, često morate žrtvovati front end da bi sve ispravno funkcioniralo.

Na kraju, to može dovesti do proizvoda koji izgleda potpuno drugačije od vaše originalne vizije. Programera možda nije briga, ali će to vjerovatno biti problematično za vas.

Nećete naići na probleme ove vrste ako sami programirate. Ne morate da zavisite od drugih da biste dobili gotov projekat, a imaćete mnogo bolje razumevanje šta se može postići u smislu razvoja. Sigurno je bilo trenutaka ili dva kada su ciljevi vašeg projekta bili previsoki za jednog programera ili razvojni tim? Kada naučite jezik kao što je Ruby, možete uživati ​​u lakoći razumijevanja potreba i mogućnosti, s druge strane.

U osnovi, Ruby je namijenjen za korištenje u web aplikacijama i web razvoju, tako da je ovo savršeno mjesto za ambiciozne web dizajnere. Jednom kada shvatite ovaj jezik i naučite kako koristiti Ruby on Rails okvir, imat ćete mnogo više kontrole nad svojim projektima.

Gdje naučiti Ruby?

Najbolji način da naučite jezik je da se uronite u njega i radite s njim. Postoji mnogo tutorijala i tutorijala na koje se također možete pozvati. Ako imate razvijenu vizuelnu memoriju i bolje razumete zahvaljujući vizuelnim prezentacijama, onda idite na YouTube - postoji veliki izbor video zapisa za obuku.

Ako želite tradicionalno učenje u učionici, možete dobiti obuku na namjenskim stranicama za učenje programiranja. Ne morate ići na univerzitet ili koledž da biste stekli radnu diplomu.

Jedan od mojih omiljenih resursa - i potpuno besplatnih - za učenje Railsa je Rails Tutorial Michaela Hartla. Vodit će vas od jednostavnog do složenog projekta vašim vlastitim tempom učenja, a možete početi od nule bez apsolutno nikakvog znanja o Ruby on Rails.

Bez obzira koji put učenja odaberete, zapamtite, samo praksa vodi do izvrsnosti. Postavite lične ciljeve da svaki dan provedete određenu količinu vremena radeći sa Ruby. Držite se ovih ciljeva i budite uporni. Prije nego što naučite ovaj jezik do kraja, već ćete biti stručnjak koji može kreirati fantastične projekte.

Ovaj vodič pokriva instalaciju i pokretanje Ruby on Rails.

Nakon što ga pročitate, saznaćete:

  • Kako instalirati Rails, kreirati novu Rails aplikaciju i priložiti vašu aplikaciju bazi podataka.
  • Opća struktura Rails aplikacije.
  • Osnovni principi MVC (Model, View Controller) i RESTful dizajna.
  • Kako brzo generirati početni kod Rails aplikacije.

Pretpostavke u ovom vodiču

Ovaj vodič je namijenjen početnicima koji žele pokrenuti Rails aplikaciju od nule. To ne znači da ste ranije radili sa Rails-om.

Rails je okvir za web razvoj napisan u programskom jeziku Ruby. Ako ste novi u Rubyju, možda će vam biti teško odmah započeti s Railsom. Postoje neki dobri resursi na engleskom jeziku za učenje Rubyja, na primjer:

Imajte na umu da neki od resursa, iako su još uvijek odlični, još uvijek pokrivaju starije verzije Rubyja kao što je 1.6, a posebno 1.8, i ne uključuju dio sintakse koju ćete vidjeti u svom svakodnevnom razvoju Railsa.

Šta je Rails?

Rails je okvir za web razvoj napisan u programskom jeziku Ruby. Dizajniran je da olakša programiranje web aplikacija korištenjem brojnih pretpostavki o tome šta je svakom programeru potrebno za kreiranje novog projekta. Omogućava vam da pišete manje koda tokom programiranja od drugih jezika i okvira. Profesionalni Rails programeri također primjećuju da je razvoj web aplikacija zabavniji s njim =)

Rails je majstorski softver... On pretpostavlja da postoji "bolji" način da se nešto uradi, i dizajniran je da ohrabruje na taj način - au nekim slučajevima čak i obeshrabruje alternative. Ako proučavate "The Rails Way", vjerovatno ćete otkriti značajno povećanje produktivnosti. Ako ustrajete i prenesete stare navike iz drugih jezika u razvoj Railsa, i pokušate koristiti obrasce naučene negdje drugdje, vaše razvojno iskustvo će biti manje sretno.

Filozofija Railsa uključuje dva važna vodeći principa:

  • Nemojte se ponavljati: DRY je princip razvoja softvera koji kaže da "Svaka informacija mora imati jedinstvenu, neredundantnu, autoritativnu reprezentaciju u sistemu." Nemojte pisati iste informacije iznova i iznova, kod će biti lakši za održavanje, proširiviji i manje grešaka.
  • Konvencija o konfiguraciji: Rails ima mišljenja o najbolji način učiniti puno stvari u web aplikaciji, a ove konvencije su izložene prema zadanim postavkama, umjesto da vas prisiljavaju da podešavate brojne konfiguracijske datoteke u malim detaljima.

Kreiranje novog Rails projekta

Najbolji način da koristite ovaj vodič je da ga prođete korak po korak. Svi koraci su neophodni za pokretanje primjera aplikacije i nisu potrebni dodatni kod ili koraci.

Prateći ovaj vodič, kreirat ćete Rails projekat pod nazivom blog, vrlo jednostavan web blog. Prije nego počnemo graditi našu aplikaciju, moramo se uvjeriti da je sam Rails instaliran.

Sljedeći primjeri koriste $ za označavanje terminalnog ulaznog niza u UNIX-u operativni sistemi ah, iako može biti drugačije konfigurisano. Ako koristite Windows, linija će izgledati kao c: \ izvorni_kod>

3.1. Instaliranje šina

Prije instaliranja Railsa, morate provjeriti da li su potrebne pred-zavisnosti instalirane na vašem sistemu. To uključuje Ruby i SQLite3.

Otvorite aplikacije za komandna linija... Na macOS-u otvorite Terminal.app, na Windows-u izaberite Pokreni iz menija Start i otkucajte cmd.exe. Sve naredbe koje počinju sa znakom dolara $ moraju se pokrenuti na komandnoj liniji. Provjerite imate li instaliranu trenutnu verziju Ruby-a:

$ ruby ​​-v ruby ​​2.5.0

Za Rails je potreban Ruby 2.5.0 ili noviji za instaliranje. Ako je broj verzije manji od ovog, morat ćete instalirati novu kopiju Rubyja.

Da brzo instalirate Ruby i Ruby on Rails na sistem, Windows korisnici može koristiti Rails Installer. Dodatne metode postavke za većinu operativnih sistema mogu se vidjeti na ruby-lang.org.

Ako koristite Windows, morate instalirati Ruby Installer Development Kit.

Također će vam trebati instalacija baze podataka SQLite3.

Mnogi popularni operativni sistemi slični UNIX-u isporučuju se sa prihvatljivom verzijom SQLite3. Na Windows-u, ako ste instalirali Rails koristeći Rails Installer, već imate instaliran SQLite. Drugi korisnici mogu pogledati upute za instalaciju na web stranici SQLite3. Provjerite da li je ispravno instaliran i uključen u vaš PATH:

$ sqlite3 --verzija

Program bi trebao prijaviti svoju verziju.

Da instalirate Rails, koristite naredbu gem install koju pruža RubyGems:

$ gem instalacijske šine

Da biste provjerili da li je sve ispravno instalirano, morate učiniti sljedeće:

$ rails --verzija

Ako vidite nešto poput "Rails 6.0.0" možete nastaviti.

3.2. Kreiranje aplikacije Blog

Rails dolazi sa brojnim skriptama koje se nazivaju generatori, dizajnirane da olakšaju život programeru kreiranjem svega što je potrebno da se započne sa datim zadatkom. Jedan je Generator novih aplikacija, koji vam daje osnovu za Rails aplikaciju tako da ne morate sami da je pišete.

Da biste koristili ovaj generator, otvorite terminal, idite u mapu u kojoj imate dozvolu za kreiranje datoteka i napišite:

$ rails novi blog

Ovo će kreirati Rails aplikaciju pod nazivom Blog u direktoriju bloga i instalirati dragulje za koje su ovisnosti spomenute u Gemfile-u pomoću paketne instalacije.

At koristeći Windows Podsistem za Linux, postoje neka ograničenja za poruke sistem podataka, što znači da se onemogućuju opruge i slušaju dragulji, što se može uraditi pokretanjem railsa new blog --skip-spring --skip-listen.

Možete vidjeti sve moguće opcije komandne linije koje Rails graditelj aplikacija prihvata pokretanjem rails new -h.

Nakon što kreirate aplikaciju za blog, idite na njen folder:

Direktorij bloga sadrži nekoliko automatski generiranih datoteka i mapa koje definiraju strukturu vaše Rails aplikacije. Većina posla u ovom vodiču će se odvijati u folderu aplikacije, ali za sada idemo preko funkcija svake mape koju Rails kreira u novoj zadanoj aplikaciji:

Fajl / Fascikla Imenovanje
aplikacija / Sadrži kontrolere, modele, poglede, pomoćnike, mailere, kanale, poslove i sredstva za vašu aplikaciju. Kasnije ćemo detaljnije pogledati ovaj folder.
kanta / Sadrži Rails skripte koje pokreću vašu aplikaciju, a direktorij također može sadržavati druge skripte koje koristite za konfiguriranje, ažuriranje, implementaciju ili pokretanje.
konfiguracija / Konfiguracije rute, baza podataka vaše aplikacije itd. Ovo je detaljnije pokriveno u Konfiguraciji Rails aplikacija.
config.ru Konfiguracija stalka za servere zasnovane na racku koji se koriste za pokretanje aplikacije. Za više informacija o Racku, pogledajte web stranicu Rack.
db / Sadrži trenutnu šemu vaše baze podataka, kao i migracije baze podataka.
Gemfile
Gemfile.lock
Ovi fajlovi vam omogućavaju da odredite koje su zavisnosti od dragulja potrebna vašoj Rails aplikaciji. Ove datoteke koristi dragulj Bundler. Za više informacija o Bundleru, pogledajte web stranicu Bundlera.
lib / Eksterni moduli za vašu aplikaciju.
log / Dnevnici aplikacije.
package.json Ovaj fajl vam omogućava da odredite koje su npm zavisnosti potrebne za vašu Rails aplikaciju. Ovu datoteku koristi Yarn. Za više informacija o Yarn, pogledajte web stranicu Yarn.
javno / Jedini folder kojem se može pristupiti izvana kakav jeste. Sadrži statičke datoteke i kompajlirane imovine.
Rakefile Ova datoteka pronalazi i učitava zadatke koji se mogu pokrenuti iz komandne linije. Specifičan zadatak je dostupan u svim Rails komponentama. Umjesto da mijenjate Rakefile, možete dodati vlastite zadatke dodavanjem datoteka u direktorij aplikacije lib / tasks.
README.md Ovo je uvodni vodič za vašu aplikaciju. Trebalo bi ga urediti kako bi drugima rekao šta radi vaša aplikacija, kako je konfigurirati itd.
skladište / Datoteke Active Storage za uslugu Disk. Ovo je pokriveno u vodiču za pregled aktivne memorije.
test / Jedinični testovi, uređaji i drugi aparati za testiranje. Ovo je pokriveno u vodiču Testiranje Rails aplikacija.
tmp / Privremeni fajlovi (kao što su keš i pid fajlovi)
prodavac / Mjesto za kod treće strane. U tipičnoj Rails aplikaciji, uključuje vanjske dragulje.
.gitignore Ovaj fajl govori git-u koje fajlove (eksplicitno ili divlje) da ignoriše. Za više informacija o ignoriranju datoteka pogledajte GitHub - Ignorisanje datoteka.
.ruby-version Ovaj fajl sadrži podrazumevanu verziju Ruby-ja.

Zdravo, Rails!

Prvo, prikažimo tekst na ekranu. Ovo zahtijeva pokrenuti server za vašu Rails aplikaciju.

4.1. Pokretanje web servera

U stvari, već imate funkcionalnu Rails aplikaciju. Da biste bili sigurni, morate pokrenuti web server na svom stroju. Ovo se može učiniti pokretanjem sljedeće naredbe iz direktorija bloga:

Ako koristite Windows, morate prenijeti skripte iz bin foldera direktno u Ruby interpreter, tj. ruby ​​bin \ rails server.

Kompresija JavaScript sredstava zahtijeva JavaScript runtime na vašem sistemu, a njegovo odsustvo će rezultirati greškom execjs prilikom komprimiranja sredstava. Obično macOS i Windows dolaze s instaliranim JavaScript runtime-om. therubyrhino je preporučeno vrijeme izvođenja za JRuby korisnike i dodaje se u Gemfile ako je aplikacija generirana sa JRuby. Možete saznati sve o podržanim runtimeima u ExecJS

Ovo će pokrenuti Puma, zadani web server sa Rails-om. Da biste vidjeli aplikaciju u akciji, otvorite prozor preglednika i idite na http: // localhost: 3000. Trebali biste vidjeti zadanu Rails info stranicu:

Da biste zaustavili web server, pritisnite Ctrl + C na terminalu na kojem je pokrenut. Trebali biste ponovo vidjeti kursor komandne linije kako biste potvrdili da je server zaustavljen. Za većinu sistema sličnih UNIX-u, uključujući macOS, ovo će biti znak dolara $. U modu razvoja, Rails generalno ne zahteva zaustavljanje servera; server automatski preuzima sve promjene koje napravite na fajlovima.

Stranica Welcome Aboard je poput testa za novu Rails aplikaciju: pokazuje da su vaši programi dovoljno ispravno konfigurisani da renderuju stranicu.

4.2. Pozdravite Rails

Da bi Rails rekao Hello, morate barem kreirati kontroler i vyuhu(performanse).

Svrha kontrolora je primanje specifičnih zahtjeva za aplikaciju. Routing odlučuje koji će kontrolor primati koje zahtjeve. Često postoji više od jedne rute do svakog kontrolera, a različite rute se mogu rukovati različito. akcione igre... Svrha svake akcije je prikupljanje informacija za prezentaciju u pogledu.

Svrha prikaza je da prikaže ove informacije u čitljivom formatu. Važna razlika koju treba napraviti je da je mjesto gdje se informacije prikupljaju kontroler, ne pogled. Prikaz bi trebao prikazati samo ove informacije. Podrazumevano, predlošci pogleda su napisani na jeziku koji se zove eRuby (Embedded Ruby), koji se konvertuje u Rails petlji zahteva pre nego što se pošalje korisniku.

Da kreirate novi kontroler, pokrećete generator "kontrolera" i kažete mu da želite kontroler pod nazivom "Dobrodošli" sa akcijom pod nazivom "indeks", poput ove:

$ rails generiše indeks dobrodošlice kontrolera

Rails će kreirati neke datoteke i rutu.

Kreirajte aplikaciju / kontroleri / welcome_controller.rb ruta get "welcome / index" pozovite erb kreirajte aplikaciju / poglede / dobrodošli kreirajte aplikaciju / views / dobrodošli / index.html.erb pozovite test_unit kreirajte test / kontroleri / welcome_controller_test.rb pozovite pomoćnik kreirajte aplikaciju / helpers / welcome_helper.rb pozvati test_unit pozvati sredstva pozvati scss kreirati aplikaciju / sredstva / stylesheets / welcome.scss

Najvažniji od njih su, naravno, kontroler koji se nalazi na app / controllers / welcome_controller.rb i pogled na app / views / welcome / index.html.erb.

Otvorite app / views / welcome / index.html.erb u uređivaču teksta. Izbrišite sav postojeći kod u datoteci i zamijenite ga sljedećim redom koda:

Ako ponovo pošaljete obrazac, vidjet ćete nešto poput sljedećeg:

"Prvi članak!", "Text" => "Ovo je moj prvi članak.") Dozvoljeno: false>

Ova radnja sada prikazuje parametre za članak koji je došao iz obrasca. Međutim, ovo je još uvijek beskorisno. Da, možete vidjeti parametre, ali u suštini ništa ne radite s njima.

5.4. Kreiranje modela članka

Modeli u Rails-u koriste ime u jednini, a njihova odgovarajuća tablica baze podataka koristi naziv u množini. Rails pruža generator modela koji većina Rails programera koristi za kreiranje novih modela. Da kreirate novi model, pokrenite ovu naredbu u svom terminalu:

$ rails generiše model Naslov članka: string tekst: tekst

Ovom komandom kažemo Rails-u da želimo model članka sa atributom naslov tip stringa i atribut tekst tip teksta. Ovi atributi će se automatski dodati u tabelu članaka i povezati s modelom članka.

Rails će kreirati niz datoteka kao odgovor. Sada nas zanimaju samo app / models / article.rb i db / migrate / 20140120191729_create_articles.rb (vaše ime može biti malo drugačije). Potonji je odgovoran za kreiranje strukture baze podataka, zbog čega ćemo je dalje razmotriti.

Active Record je dovoljno pametan da automatski poveže imena kolona sa atributima modela, što znači da ne morate deklarisati atribute unutar Rails modela, Active Record će to učiniti automatski.

5.5. Pokrenuta migracija

Kao što ste vidjeli, rails generiše model koji je generirao datoteku migracije baze podataka u direktoriju db/migrate. Migracije je Ruby klasa dizajnirana da olakša kreiranje i modificiranje tabela baze podataka. Rails koristi komande rake za pokretanje migracija, a moguće je poništiti migraciju nakon što je primijenjena na vašu bazu podataka. Ime datoteke za migraciju uključuje vremensku oznaku kako bi se osiguralo da se izvršavaju redoslijedom kojim su kreirani.

Ako pogledate datoteku db / migrate / YYYYMMDDHHMMSS_create_articles.rb (zapamtite, vaš fajl ima malo drugačiji naziv), evo šta ćete tamo pronaći:

Class CreateArticles< ActiveRecord::Migration def change create_table:articles do |t| t.string:title t.text:text t.timestamps end end end

Ova migracija kreira metodu promjene koja se zove kada ova migracija započne. Radnje definirane u ovoj migraciji su također reverzibilne, što znači da Rails zna kako da poništi promjene napravljene ovom migracijom u slučaju da ih kasnije odlučite vratiti. Kada pokrenete ovu migraciju, kreirat će se tabela članaka sa stupcem niza i stupcem teksta. Također će kreirati dva polja vremenske oznake za praćenje kada je članak kreiran i ažuriran.

Sada trebamo koristiti naredbu rails da započnemo migraciju:

$ rails db: migracija

Rails će pokrenuti ovu naredbu migracije i prijaviti da je kreirala tabelu Članci.

CreateArticles: migracija =============================================== = == - create_table (: članci) -> 0,0019s == CreateArticles: migrirano (0,0020s) =========================== === ===========

Budući da radite u razvojnom okruženju prema zadanim postavkama, ova naredba će se primijeniti na bazu podataka definiranu u razvojnom dijelu vašeg config / database.yml datoteke. Ako želite da migrirate u drugom okruženju, na primjer u proizvodnji, morate ga eksplicitno proslijediti kada pozovete naredbu: rails db: migrate RAILS_ENV = production.

5.6. Pohranjivanje podataka u kontroler

Nazad u ArticlesControlleru, moramo modificirati akciju kreiranja da bismo koristili novi model članka za zadržavanje podataka u bazi podataka. Otvorite app / controllers / articles_controller.rb i modificirajte akciju kreiranja na sljedeći način:

Def create @article = Article.new (params [: article]) @ article.save redirect_to @article end

Evo šta se ovdje događa: svaki Rails model može biti inicijaliziran odgovarajućim atributima koji će se automatski vezati za odgovarajuće stupce baze podataka. U prvom redu radimo upravo to (zapamtite da params [: article] sadrži atribute koji nas zanimaju). Tada je @ article.save odgovoran za spremanje modela u bazu podataka. Konačno, korisnika preusmjeravamo na akciju prikazivanja, koju ćemo kasnije definirati.

Možda se pitate zašto je A u Article.new napisano velikim slovima, iako su sve ostale reference na članke u ovom vodiču sve male. U ovom kontekstu, mislimo na klasu pod nazivom Article, koja je definirana u app / models / article.rb. Imena klasa u Rubyju moraju početi velikim slovom.

Sada kada postoje validacije, pozivanje @ article.save na nevažeći članak će vratiti false. Ako ponovo otvorite app / controllers / articles_controller.rb, možete vidjeti da ne provjeravamo rezultat poziva @ article.save u akciji kreiranja. Ako @ article.save ne uspije u ovoj situaciji, moramo ponovo pokazati obrazac korisniku. Da biste to učinili, zamijenite nove i kreirajte radnje u app / controllers / articles_controller.rb sa ovim:

Def new @article = Article.new end def create @article = Article.new (article_params) if @ article.save redirect_to @article else render "new" end end private def article_params params.require (: article) .permit (: title ,: tekst) kraj

Nova akcija sada stvara novu varijablu instance pod nazivom @article, a u nekoliko pasusa ćete vidjeti zašto.

Imajte na umu da smo u akciji kreiranja koristili render umjesto redirect_to kada save vraća false. Metoda renderiranja se koristi tako da se objekt @article vraća u novi predložak kada se renderira. Ovo prikazivanje se radi kao dio istog zahtjeva kao i podnošenje obrasca, dok redirect_to govori pretraživaču da napravi drugi zahtjev.

5.11. Ažuriranje članaka

Otkrili smo "CR" dio CRUD-a. Sada se fokusirajmo na "U" dio, ažurirajući članke.

Prvi korak je dodavanje radnje uređivanja u ArticlesController, obično između nove i kreiranja radnji, kao što je prikazano.

Def new @article = Article.new end def edit @article = Article.find (params [: id]) end def create @article = Article.new (article_params) if @ article.save redirect_to @article else render "new" end kraj

Prikaz će sadržavati obrazac sličan onom koji smo koristili prilikom kreiranja novih članaka. Kreirajte datoteku pod nazivom app / views / articles / edit.html.erb i dodajte joj sljedeće:

Uređivanje članka

<%= form_with(model: @article, local: true) do |form| %> <% if @article.errors.any? %>

<%= pluralize(@article.errors.count, "error") %>

    <% @article.errors.full_messages.each do |msg| %>
  • <%= msg %>
  • <% end %>
<% end %>

<%= form.label:title %>
<%= form.text_field:title %>

<%= form.label:text %>
<%= form.text_area:text %>

<%= form.submit %>

<% end %> <%= link_to "Back", articles_path %>

Sada upućujemo obrazac na akciju ažuriranja koja još nije definirana, ali ćemo to učiniti uskoro.

Prosljeđivanje objekta članka metodi form_with automatski će postaviti URL za slanje uređenog obrasca članka. Ova opcija govori Rails-u da želimo da se ovaj obrazac pošalje korištenjem PATCH, HTTP metode za koju se očekuje da će se obnavljanje resurse u skladu sa REST protokolom.

Zatim morate kreirati akciju ažuriranja u app / controllers / articles_controller.rb. Dodajte ga između akcije kreiranja i privatne metode:

Def create @article = Article.new (article_params) if @ article.save redirect_to @article else render "new" end end def update @article = Article.find (params [: id]) if @ article.update (article_params) redirect_to @article else render "edit" end end private def article_params params.require (: article) .permit (: title,: text) end

Nova metoda, update, koristi se kada želite da ažurirate zapis koji već postoji i prihvata hash koji sadrži atribute koje želite da ažurirate. Kao i ranije, ako dođe do greške prilikom ažuriranja članka, želimo ponovo prikazati obrazac korisniku.

Ponovo smo koristili metodu article_params koju smo ranije definirali za akciju kreiranja.

Nije potrebno proslijediti sve atribute za ažuriranje. Na primjer, ako je pozvan @ article.update (naslov: "Novi naslov"), Rails će ažurirati samo atribut title, ostavljajući sve ostale atribute netaknutim.

<% @articles.each do |article| %> <% end %>
Naslov Tekst
<%= article.title %> <%= article.text %> <%= link_to "Show", article_path(article) %> <%= link_to "Edit", edit_article_path(article) %>

I također dodajte u aplikaciju / views / articles / show.html.erb predložak tako da link "Uredi" također bude na stranici članka. Dodajte sljedeće na kraj vašeg predloška:

... <%= link_to "Edit", edit_article_path(@article) %> | <%= link_to "Back", articles_path %>

A ovako naša aplikacija sada izgleda:

5.12. Korišćenje parcijala za čišćenje ponavljanja u prikazima

Naša stranica za uređivanje je vrlo slična novoj stranici, u stvari koriste isti kod za prikazivanje obrasca. Uklonimo ovo dupliranje korištenjem djelomičnog pogleda. Po konvenciji, djelomične datoteke počinju donjom crtom.

Kreirajte novu datoteku app / views / articles / _form.html.erb sa sljedećim sadržajem:

<%= form_with model: @article, local: true do |form| %> <% if @article.errors.any? %>

<%= pluralize(@article.errors.count, "error") %>zabranio čuvanje ovog članka:

    <% @article.errors.full_messages.each do |msg| %>
  • <%= msg %>
  • <% end %>
<% end %>

<%= form.label:title %>
<%= form.text_field:title %>

<%= form.label:text %>
<%= form.text_area:text %>

<%= form.submit %>

<% end %>

Ažurirajmo sada aplikaciju za pregled/preglede/članke/new.html.erb da koristi ovaj novi djelomično prepisivanjem u cijelosti:

Novi članak

<%= render "form" %> <%= link_to "Back", articles_path %>

I isto za aplikaciju / poglede / članke / edit.html.erb pogled:

Uredi članak

<%= render "form" %> <%= link_to "Back", articles_path %>

5.13. Brisanje članaka

Sada smo spremni za proširenje na "D" dio CRUD-a, brisanjem iz baze podataka. Slijedeći REST konvenciju, put za brisanje članaka u izlazu tračničkih ruta je sljedeći:

DELETE /articles/:id(.:format) articles # uništiti

Metodu rutiranja brisanja treba koristiti za rute koje uništavaju resurse. Ako se ostavi kao redovna ruta za dobivanje, bilo bi moguće kreirati sljedeće zlonamjerne URL-ove:

pogledajte ovu mačku!

Koristimo metodu delete za uništavanje resursa, a ova ruta je povezana s akcijom uništavanja u app / controllers / articles_controller.rb koja još ne postoji. Metoda uništavanja je obično posljednja CRUD akcija u kontroleru, i kao i druge javne CRUD akcije, mora se staviti ispred bilo koje privatne ili zaštićene metode. Dodajmo to:

Def destroy @article = Article.find (params [: id]) @ article.destroy redirect_to articles_path end

Kompletan ArticlesController u app / controllers / articles_controller.rb bi sada trebao izgledati ovako:

Class ArticlesController< ApplicationController def index @articles = Article.all end def show @article = Article.find(params[:id]) end def new @article = Article.new end def edit @article = Article.find(params[:id]) end def create @article = Article.new(article_params) if @article.save redirect_to @article else render "new" end end def update @article = Article.find(params[:id]) if @article.update(article_params) redirect_to @article else render "edit" end end def destroy @article = Article.find(params[:id]) @article.destroy redirect_to articles_path end private def article_params params.require(:article).permit(:title, :text) end end

Možete pozvati uništiti objekte Active Record kada ih želite ukloniti iz baze podataka. Imajte na umu da ne moramo da dodajemo pogled za ovu radnju, jer preusmjeravamo na indeks.

Listing Articles

<%= link_to "New article", new_article_path %> <% @articles.each do |article| %> <% end %>
Naslov Tekst
<%= article.title %> <%= article.text %> <%= link_to "Show", article_path(article) %> <%= link_to "Edit", edit_article_path(article) %> <%= link_to "Destroy", article_path(article), method: :delete, data: { confirm: "Are you sure?" } %>

Ovdje koristimo link_to na drugačiji način. Imenovanu rutu prosljeđujemo kao drugi argument, a opcije kao drugi argument. Metoda:: delete i data: (potvrdite: "Jeste li sigurni?") Opcije se koriste kao html5 atributi, tako da kada se klikne na vezu, Rails će prvo pokazati korisniku dijalog za potvrdu, a zatim poslati link koristeći metodu brisanja . Ovo se radi pomoću rails-ujs JavaScript datoteke, koja se automatski uključuje u izgled aplikacije (app / views / layouts / application.html.erb) kada se aplikacija generiše. Bez ove datoteke, dijalog za potvrdu neće biti prikazan.

Čestitamo, sada možete kreirati, pregledavati sve i pojedinačno, ažurirati i uništavati članke.

Dodavanje drugog modela

Sada je vrijeme da u aplikaciju dodate drugi model. Drugi model će obraditi komentare na članke.

6.1. Generisanje modela

Namjeravamo koristiti isti generator koji smo koristili ranije prilikom kreiranja modela članka. Ovaj put ćemo kreirati model komentara koji sadrži link do članka. Pokrenite sljedeću naredbu u terminalu:

$ rails generiše model Komentator komentara: tijelo stringa: tekst članak: reference

Ova komanda generiše četiri fajla:

Prvo pogledajte app / models / comment.rb:

Class Comment< ApplicationRecord belongs_to:article end

Ovo je vrlo slično modelu članka koji smo vidjeli ranije. Razlika je u redu belongs_to: article, koji postavlja veza Active Record. Vidjet ćete veze u sljedećem dijelu vodiča.

Ključna riječ (: reference) koja se koristi u komandi bash je poseban tip podataka za modele. Kreira novu kolonu u vašoj bazi podataka koja se zove predstavljeni model s dodatkom _id koji može sadržavati numeričke vrijednosti... Da biste bolje razumjeli, analizirajte datoteku db / schema.rb nakon izvođenja migracije.

Pored modela, Rails je također izvršio migraciju kako bi kreirao odgovarajuću tablicu baze podataka:

Class CreateComments< ActiveRecord::Migration def change create_table:comments do |t| t.string:commenter t.text:body t.references:article, null: false, foreign_key: true t.timestamps end end end

Linija t.references kreira numeričku kolonu pod nazivom article_id, indeks za nju i ograničenje stranog ključa koje ukazuje na kolonu id tabele članaka. Zatim započinjemo migraciju:

$ rails db: migracija

Rails je dovoljno pametan da izvodi samo migracije koje još nisu pokrenute za trenutnu bazu podataka, u našem slučaju ćete vidjeti:

CreateComments: migracija =============================================== = = - create_table (: komentari) -> 0,0115s == Kreiraj komentare: migrirao (0,0119s) =========================== ==== ========

6.2. Povezivanje modela

Linkovi Active Record vam omogućavaju da lako deklarirate odnos između dva modela. U slučaju komentara i članaka, odnos možete opisati na sljedeći način:

  • Svaki komentar pripada jednom članku.
  • Jedan članak može imati mnogo komentara.

U stvari, ovo je vrlo blisko sintaksi koju Rails koristi da deklarira ovaj odnos. Već ste vidjeli red koda u modelu komentara (app / models / comment.rb) koji čini da svaki komentar pripada članku:

Class Comment< ApplicationRecord belongs_to:article end

Morate urediti app / models / article.rb dodajući drugu stranu linka:

Class Article< ApplicationRecord has_many:comments validates:title, presence: true, length: { minimum: 5 } [...] end

Ove dvije najave automatski stavljaju na raspolaganje široku paletu opcija. Na primjer, ako imate varijablu instance @article koja sadrži članak, možete dobiti sve komentare koji pripadaju tom članku u nizu pozivanjem @ article.comments.

6.3. Dodavanje rute za komentare

Kao i kod kontroler dobrodošlice, moramo dodati rutu tako da Rails zna gdje želimo ići kako bi vidjeli komentare. Ponovo otvorite datoteku config / routes.rb i uredite je na sljedeći način:

Resursi: članci čine resurse: kraj komentara

Ovo će stvoriti komentare poput ugniježđeni resurs u člancima. Ovo je druga strana hvatanja hijerarhijskih odnosa koji postoje između članaka i komentara.

6.4. Generisanje kontrolera

Sa modelom u ruci, obratimo pažnju na kreiranje odgovarajućeg kontrolera. Hajde da koristimo isti generator koji smo koristili ranije:

$ rails generiše komentare kontrolera

Kreiraće se četiri fajla i prazan direktorijum:

Kao i kod svakog bloga, naši čitatelji će svoje komentare objaviti odmah nakon čitanja članka, a nakon dodavanja komentara bit će usmjereni nazad na stranicu za prikaz članka i vidjeti da je njihov komentar već prikazan. U tom smislu, naš CommentsController služi kao sredstvo za kreiranje komentara i uklanjanje neželjene pošte, ako postoji.

Prvo ćemo proširiti predložak za prikaz članaka (app / views / articles / show.html.erb) kako bismo nam omogućili dodavanje novi komentar:

Naslov: <%= @article.title %>

Tekst: <%= @article.text %>

Dodajte komentar:

<%= form_with(model: [ @article, @article.comments.build ], local: true) do |form| %>

<%= form.label:commenter %>
<%= form.text_field:commenter %>

<%= form.label:body %>
<%= form.text_area:body %>

<%= form.submit %>

<% end %> <%= link_to "Edit", edit_article_path(@article) %> | <%= link_to "Back", articles_path %>

Ovo će dodati obrazac na stranicu za prikaz članka, stvarajući novi komentar kada se akcija kreiranja pozove na CommentsControlleru. Poziv form_with ovdje koristi niz, koji će kreirati ugniježđenu rutu kao što je / articles / 1 / comments.

Hajde da napišemo create u app / controllers / comments_controller.rb:

Class CommentsController< ApplicationController def create @article = Article.find(params[:article_id]) @comment = @article.comments.create(comment_params) redirect_to article_path(@article) end private def comment_params params.require(:comment).permit(:commenter, :body) end end

Ovo je malo složenije od onoga što ste vidjeli u kontroleru članaka. to nuspojava prilog koji ste konfigurisali. Svaki zahtjev za komentarom prati članak uz koji je komentar priložen, tako da prvo rješavamo problem preuzimanja članka pozivanjem find na modelu Članak.

Osim toga, kod koristi prednosti nekih metoda dostupnih za odnose. Koristimo metodu kreiranja na @ article.comments za kreiranje i spremanje komentara. Ovo automatski povezuje komentar tako da pripada određenom članku.

Nakon što kreiramo novi komentar, vraćamo korisnika na originalni članak pomoću pomoćnika article_path (@article). Kao što smo vidjeli, on poziva akciju show na ArticlesControlleru, koji zauzvrat prikazuje show.html.erb šablon. Ovo je mjesto gdje želimo prikazati komentare, pa dodajmo sljedeće u app / views / articles / show.html.erb.

Naslov: <%= @article.title %>

Tekst: <%= @article.text %>

Komentari

<% @article.comments.each do |comment| %>

Komentator: <%= comment.commenter %>

komentar: <%= comment.body %>

<% end %>

Dodajte komentar:

<%= form_with(model: [ @article, @article.comments.build ], local: true) do |form| %>

<%= form.label:commenter %>
<%= form.text_field:commenter %>

<%= form.label:body %>
<%= form.text_area:body %>

<%= form.submit %>

<% end %> <%= link_to "Edit", edit_article_path(@article) %> | <%= link_to "Back", articles_path %>

Sada možete dodati članke i komentare na svoj blog i prikazati ih na pravim mjestima.

Refaktoring

Sada kada imamo radne članke i komentare, pogledajmo predložak app / views / articles / show.html.erb. Postalo je dugo i neprijatno. Upotrijebimo djelomične da ga rasteretimo.

7.1. Rendering djelomične kolekcije

Prvo, napravimo djelimičan komentar koji prikazuje sve komentare za članak. Kreirajte datoteku app / views / comments / _comment.html.erb i stavite sljedeće u nju:

Komentator: <%= comment.commenter %>

komentar: <%= comment.body %>

Zatim možete promijeniti app/views/ articles/show.html.erb ovako:

Naslov: <%= @article.title %>

Tekst: <%= @article.text %>

Komentari

<%= render @article.comments %>

Dodajte komentar:

<%= form_with(model: [ @article, @article.comments.build ], local: true) do |form| %>

<%= form.label:commenter %>
<%= form.text_field:commenter %>

<%= form.label:body %>
<%= form.text_area:body %>

<%= form.submit %>

<% end %> <%= link_to "Edit", edit_article_path(@article) %> | <%= link_to "Back", articles_path %>

Ovo će sada prikazati aplikaciju / poglede / komentare / _comment.html.erb djelomično jednom za svaki komentar u kolekciji @ article.comments. Pošto metoda renderiranja ponavlja kolekciju @ article.comments, ona svaki komentar dodeljuje lokalnoj varijabli sa istim imenom kao i delimični, u našem slučaju komentar, koji nam je dostupan u delimičnom prikazu.

7.2. Renderiranje forme u parcijalu

Premjestimo i novi odjeljak za komentare u naš dio. Opet kreirajte datoteku app / views / comments / _form.html.erb koja sadrži:

<%= form_with(model: [ @article, @article.comments.build ], local: true) do |form| %>

<%= form.label:commenter %>
<%= form.text_field:commenter %>

<%= form.label:body %>
<%= form.text_area:body %>

<%= form.submit %>

<% end %>

Zatim promijenite app/views/ articles/show.html.erb na sljedeći način:

Naslov: <%= @article.title %>

Tekst: <%= @article.text %>

Komentari

<%= render @article.comments %>

Dodajte komentar:

<%= render "comments/form" %> <%= link_to "Edit", edit_article_path(@article) %> | <%= link_to "Back", articles_path %>

Drugi render samo definiše šablon za parcijal koji želimo da renderujemo, komentare/formu. Rails je dovoljno pametan da stavi donju crtu na ovu liniju i shvati da želite prikazati datoteku _form.html.erb u direktoriju app / views / comments.

Objekt @article dostupan je na svim dijelovima prikazanim u pogledu, budući da smo ga definirali kao varijablu instance.

Brisanje komentara

Još jedna važna karakteristika bloga je mogućnost uklanjanja neželjene pošte. Da biste to učinili, trebate umetnuti neku vezu u prikaz i akciju uništavanja u CommentsController.

Komentator: <%= comment.commenter %>

komentar: <%= comment.body %>

<%= link_to "Destroy Comment", , method: :delete, data: { confirm: "Are you sure?" } %>

Klikom na ovu novu vezu "Destroy Comment" pokrenut će se DELETE / articles /: article_id / comments /: id u našem CommentsControlleru, koji će se zatim koristiti za pronalaženje komentara koji želimo izbrisati, pa dodajmo akciju uništavanja našem kontroleru (aplikacija / kontroleri / comments_controller.rb):

Class CommentsController< ApplicationController def create @article = Article.find(params[:article_id]) @comment = @article.comments.create(comment_params) redirect_to article_path(@article) end def destroy @article = Article.find(params[:article_id]) @comment = @article.comments.find(params[:id]) @comment.destroy redirect_to article_path(@article) end private def comment_params params.require(:comment).permit(:commenter, :body) end end

Akcija uništavanja će pronaći članak koji gledamo, pronaći komentar u kolekciji @ article.comments, a zatim ga ukloniti iz baze podataka i vratiti nas da pogledamo članak.

8.1. Uklanjanje povezanih objekata

Ako izbrišete članak, pridruženi komentari također moraju biti obrisani, inače će jednostavno zauzeti prostor u bazi podataka. Rails vam omogućava da koristite zavisnu opciju na linku da biste to postigli. Modificirajte model članka, app / models / article.rb, na sljedeći način:

Class Article< ApplicationRecord has_many:comments, dependent: :destroy validates:title, presence: true, length: { minimum: 5 } [...] end

Sigurnost

9.1. Basic Authentication

Ako objavite svoj blog na mreži, svako može dodavati, uređivati ​​i brisati članke ili brisati komentare.

Rails pruža osnovni HTTP sistem provjere autentičnosti koji dobro funkcionira u ovoj situaciji.

U ArticlesControlleru nam je potreban način da blokiramo pristup raznim radnjama ako korisnik nije autentificiran. Ovdje možemo koristiti Rails http_basic_authenticate_with metodu da dozvolimo pristup potrebnim radnjama, ako metoda to dozvoljava.

Da bismo koristili sistem provjere autentičnosti, definirat ćemo ga na vrhu našeg ArticlesControllera u app / controllers / articles_controller.rb. U našem slučaju želimo da korisnik bude autentificiran za svaku radnju osim indeksiranja i prikaza, pa pišemo ovako:

Class ArticlesController< ApplicationController http_basic_authenticate_with name: "dhh", password: "secret", except: [:index, :show] def index @articles = Article.all end # пропущено для краткости

Također želimo dozvoliti samo provjerenim korisnicima da brišu komentare, pa ćemo u CommentsController (app / controllers / comments_controller.rb) napisati:

Class CommentsController< ApplicationController http_basic_authenticate_with name: "dhh", password: "secret", only: :destroy def create @article = Article.find(params[:article_id]) # ... end # пропущено для краткости

Sada, ako pokušate kreirati novi članak, naići ćete na izazov HTTP Basic Authentication:

Druge metode provjere autentičnosti su također dostupne za Rails aplikacije. Dva popularna dodatka za Rails su Devise i Authlogic, između ostalih.

9.2. Ostale misli o sigurnosti

Sigurnost, posebno u web aplikacijama, je ogromna i detaljna oblast. Osiguravanje vaše Rails aplikacije je detaljnije pokriveno u Vodiču za Osiguranje Rails aplikacija Najjednostavniji način rada sa Rails-om je pohranjivanje svih vanjskih podataka u UTF-8. Ako ne, Ruby i Rails biblioteke će često moći da konvertuju vaše izvorne podatke u UTF-8, ali to ne radi uvijek pouzdano, pa je bolje biti sigurni da su svi vanjski podaci UTF-8.

Ako pogriješite u ovoj oblasti, najčešći simptom je crni dijamant sa znakom pitanja unutra koji se pojavljuje u pretraživaču. Još jedan uobičajeni simptom su znakovi poput "ü" koji se pojavljuju umjesto "ü". Rails poduzima brojne interne korake za ublažavanje uobičajenih slučajeva problema koji se mogu automatski otkriti i popraviti. Međutim, ako postoje eksterni podaci koji nisu pohranjeni u UTF-8, to može dovesti do ovakvih problema koje Rails ne može automatski otkriti i popraviti.

Dva najčešća izvora podataka koji nisu u UTF-8 su:

  • Vaša uređivač teksta: Većina uređivača teksta (kao što je TextMate) podrazumevano sprema datoteke kao UTF-8. Ako vaš uređivač teksta to ne učini, to može rezultirati Posebni simboli uneseni u vaše šablone (kao što je é) pojaviće se kao dijamant sa upitnikom u pretraživaču. Ovo se također odnosi na vaše i18N datoteke za prijevod. Većina uređivača koji ne postavljaju zadanu vrijednost na UTF-8 (kao što su neke verzije Dreamweavera) nude način za promjenu zadanih postavki na UTF-8. Uradi ovo.
  • Vaša baza podataka: Rails konvertuje podatke iz vaše baze podataka u UTF-8 po defaultu na granici. Međutim, ako vaša baza podataka ne koristi UTF-8 interno, možda neće moći pohraniti sve znakove koje vaš korisnik unese. Na primjer, ako vaša baza podataka interno koristi latinicu-1 i vaš korisnik unese ruski, hebrejski ili japanski znakovi, podaci će biti izgubljeni čim uđu u bazu podataka. Ako je moguće, koristite UTF-8 kao internu memoriju u vašoj bazi podataka.
Podijelite ovo