Elementele de bază Ruby on rails. Cum am învățat Ruby on Rails în trei nopți

Elementele de bază Ruby on rails. Cum am învățat Ruby on Rails în trei nopți

Înainte de redactarea acestui text, autorul a fost informat de nivelul scăzut de cunoștințe Măsuri globale materiale care ar putea fi în general clasificate la aceeași poziție/etichetă: Cum am învățat Ruby(sau Ruby on Rails, PHP, JS, C++ etc.) in trei zile.

Ei bine, este diferit. Autorul, în felul său, a venit imediat cu (asociere necontrolată) o serie de anecdote, iarăși cu o temă ascunsă care stă în caracteristicile de evaluare a acțiunilor care pot fi luate de la sănătate... putem cita și capodopere aici ; Evident, nimic nu se pierde decât pentru a recunoaște respectul cititorului care a scris versiunea scrisă a documentului în ciclu Cum să înveți rapid cum să lucrezi în Ruby on Rails.

Un exemplu de lucru al codului descris în articol, printre alte exemple de șine, poate fi găsit în blogul de testare al autorului pe herokuapp.com, bine ați venit.

Tehnica este simplă, iar autorul nu pretinde deloc laurii unui scriitor de primă clasă: este necesar să fie corectă, iar rezultatele să nu fie prea greu de văzut. De asemenea, nu contează să încerci să joci cu slăbiciunile tale, uneori chiar și marnoslavismul va fi pe partea dreaptă; Pungile de serviciu vinovați ar trebui să fie astfel încât să poată fi prezentate cu mândrie cititorilor, prietenilor și colegilor din Merezhi, care s-au desfășurat undeva pentru Heroku sau Amazon, de asemenea, pentru a putea reveni la ele din nou și din nou, reevaluați și temeinic, forumurile și StackOwerflow ne vor ajuta din toate punctele de vedere. Eu zic, de ce să nu scrie, pentru început, pe blogul tău Ruby pe șine?

Puteți descărca din dock-ul de administrare Noțiuni introductive cu șine sau adaptarea noastră rusă a șinelor pentru începători, precum și Creați un blog cu Ruby on Rails, precum și materiale suplimentare pentru blogul dvs., care pot fi găsite cu ușurință în bara laterală Nouă. Și apoi - asta este, asta e magie, totul este așezat de la început ca prin note, deschideți consola - și înainte... Autorul se angajează să creeze doar câteva explicații și recomandări tehnice care să-l facă mai ușor pentru adept să asculte și să găsească Lumina ї Părțile Puterii și nu mai Togo. Atâta timp cât ești puternic, mergi înainte și întoarce-te cu schimbare.

Otje. Primul manual a fost verificat pas cu pas și, sunt sigur, nu este prea mult de lucru pentru dvs.; tot ce iese din tine – fii respectuos, repetand cu scrupulozitate notele comentate de raport... si in decurs de un an primul tau blog este deja gata, il poti reciti si trece la altul mai potrivit. Și chiar aici, este posibil să aveți nevoie de câteva lucruri de făcut, cu care vom începe.

Este clar că aceste metode sunt în întregime corecte (ca opțiune) să arate așa cum se arată mai jos, dar deloc ca în original:

app/controllers/posts_controller.rb

# Update action updates post with new information def update if @post.update_attributes(post_params) flash[:notice] = "Postificare actualizată cu succes!" redirect_to posts_path else flash[:alert] = "Eroare la actualizarea postării!" render:edit end end # Acțiunea de afișare redă postarea individuală după preluarea id-ului def show end # .destroy flash[:notice] = "Postificarea a fost ștearsă cu succes!" redirect_to posts_path else flash[:alert] = "Eroare la actualizarea postării!" sfârşitul sfârşitului

Dar atunci, încearcă oricum. Să mergem.

Un alt blog, deși mai complex (editor de articole adăugat CKEditorі concepe, vă rugăm să-l utilizați pentru autentificare în rails-add-ons), sper că completările la original să fie lipsite de comentarii. Va trebui să completați acest pic cu propria mână: urmați analogia cu descrierea creării primului blog, vor fi necesare doar modificări foarte minore: doar aparent, în schimb articolі articole primul blog va fi cu tine postі postări De la o parte la alta, axa și totul, în esență, sunt diferite. Fii respectuos și totul se va rezolva.

Recaptcha Puteți, de asemenea, să vă conectați la comentarii: ei bine, nu este Joomla, sună-mă. Cu toate acestea, nu sunt necesare eforturi titanice, procesul de conectare Recaptcha Descrieri detaliate în articolul Activează aplicația Recaptcha în Rails. Nu este nevoie să reglementezi deloc concepeîn așa fel încât blogul să funcționeze (cel puțin pentru prima dată!) într-un mod de o singură pagină, permițând majorității cititorilor săi modul READ ONLY, cu alte cuvinte, împiedicând înregistrarea de noi colaboratori de la început. Merezha are o varietate de rețete despre cum să facă acest lucru, dar, în opinia mea, cel mai competent hack de acest fel poate fi găsit în Wiki devise, în materialul sub titlul How To: Set up devise as a single user system. Și acum: crearea unui nou controler:

app/controllers/registrations_controller.rb:

Controller de înregistrări de clasă< Devise::RegistrationsController before_action:one_admin_registered?, only: [:new, :create] protected def one_admin_registered? if ((Admin.count == 1) & (admin_signed_in?)) redirect_to root_path elsif Admin.count == 1 redirect_to new_admin_session_path end end end

Apoi îl redenumim în routes.rb și asta este tot:

#devise_for:admins devise_for:admins, controllers: ( înregistrări: „înregistrări”)

CKEDITOR.editorConfig = function(config) ( // config.enterMode = 2; //dezactivat

Complet config.enterMode = CKEDITOR.ENTER_BR // apăsați tasta ENTER
config.shiftEnterMode = CKEDITOR.ENTER_P; //apăsând tastele SHIFT + ENTER

Config.autoParagraph = false; // oprește inserarea automată a

Pe focus);

Poate că, în cea mai mare parte, totul este adevărat... la naiba, nu am uitat mare lucru. Dacă aveți de gând să implementați noul dvs. blog la Heroku- adăugați trei rânduri

config/application.rb

Config.assets.precompile += Ckeditor.assets config.assets.precompile += %w(ckeditor/*) config.autoload_paths += %W(#(config.root)/app/models/ckeditor)

In caz contrar CKEditor fii entuziasmat să lucrezi într-un loc nou.

Din acest articol vreau să vă spun cum să creați o adăugare simplă care funcționează cu baza Date MySQLîn mijlocul lui Ruby on Rails 3. Puteți vedea acest material ca pokrokova kerivnitstvo pentru programatorii Rails.

Ei bine, pentru a funcționa, trebuie să instalăm șipci și rubygems. În rest, am avut o problemă ieri, mi s-a întâmplat să dezinstalez pachetul rubygems1.8, dar nu am înțeles cum să-l găsesc în sistem și să instalez rubygems1.9. Voi ghici ce cheltuiesc pe Ubuntu, vreau Comanda Windows Cred că consolele Rails vor fi la fel. Aceasta este inima dezvoltării NetBeans vikory cu un plugin pentru Ruby on Rails. Despre instalare a fost scris bine de colegii mei.

Perevіrka posilan

Este necesar să schimbați directorul /usr/bin pentru a plasa mesaje simbolice pe șine, rake, ruby, bundler pe fișierele din directorul /usr/local/ruby/bin. Pentru a reexamina situația, utilizați următoarea comandă:

Este important să știi ce vrei să filtrezi.

Crearea unui supliment

Am creat un director special pentru suplimentele mele Ruby.

mkdir /home/andrey/ruby
cd /home.andrey/ruby

Lamele au multe utilitarele consolei, ceea ce este foarte ușor pentru robot, mai ales pentru prototipuri. Pentru a crea un program, cum ar fi un vikorist sau o bază de date mysql, putem crea următoarea comandă:

aplicație - acesta este numele noului nostru program. După victoria echipei, suntem mai mult decât fericiți, deoarece rails ne-a construit cadrul noului program.

root@vaio:~/ruby# rails noua aplicație -d mysql
crea
creați README
creați Rakefile
creați config.ru
create.gitignore
creați Gemfile
creați aplicația
creați aplicație/controllers/application_controller.rb
creați aplicația/helpers/application_helper.rb
creați aplicații/mailere
creați aplicații/modele
creați app/views/layouts/application.html.erb
crea config
creați config/rute.rb
create config/application.rb
create config/environment.rb
creați config/medii
creați config/medii/dezvoltare.rb
creați config/medii/producție.rb
create config/environments/test.rb
creați configurații/inițializatori
create config/initializers/backtrace_silencers.rb
creați config/inițializatori/inflexiuni.rb
creați config/initializers/mime_types.rb
creați config/initializers/secret_token.rb
create config/initializers/session_store.rb
creați config/locale
creați config/locales/en.yml
creați config/boot.rb
creați config/database.yml
creați db
creați db/seeds.rb
creați doc
creați doc/README_FOR_APP
creați lib
creați lib/sarcini
creați lib/tasks/.gitkeep
creați jurnal
creați log/server.log
creați log/producție.log
creați log/dezvoltare.log
creați log/test.log
creează public
create public/404.html
create public/422.html
create public/500.html
create public/favicon.ico
create public/index.html
creați public/roboți.txt
creați public/imagini
creați public/images/rails.png
creați public/ foi de stil
creați public/stylesheets/.gitkeep
creați public/javascript
creați public/javascripts/application.js
creați public/javascripts/controls.js
creați public/javascripts/dragdrop.js
creați public/javascripts/effects.js
creați public/javascripts/prototype.js
creați public/javascripts/rails.js
creați un script
creați script/șine
creați testul
creați test/instalații
crea test/funcțional
creați test/integrare
creați test/performanță/browsing_test.rb
creați test/test_helper.rb
creați test/unitate
creați tmp
creați tmp/sessions
creați tmp/socket-uri
creați tmp/cache
creați tmp/pids
creați furnizor/pluginuri
creați furnizor/plugins/.gitkeep

Mergem în folderul cu el și instalăm pietrele necesare. Gemi este biblioteca care este inclusă și este necesară pentru proiect (analog cu PHP-ul PECL și PEAR).

După aceasta, în consolă veți vedea următoarele:

andrey@vaio:~/ruby/app> sudo bundle install
Folosind rake (0.8.7)
Folosind abstract (1.0.0)
Utilizarea activesupport (3.0.0)
Folosind builder (2.1.2)
Folosind i18n (0.4.2)
Pentru un model activ suplimentar (3.0.0)
Folosind erubis (2.6.6)
Utilizarea rack (1.2.1)
Folosind montarea în rack (0.6.13)
Utilizarea rack-test (0.5.6)
Folosind tzinfo (0.3.23)
Pentru ajutor suplimentar pachetul de acțiuni (3.0.0)
Utilizarea tipurilor mime (1.16)
Folosind poliglot (0.3.1)
Utilizarea vârfului copacului (1.4.8)
Utilizarea e-mailului (2.2.9)
Pentru ajutor suplimentar actionmailer (3.0.0)
Folosind arel (1.0.1)
Pentru înregistrare activă suplimentară (3.0.0)
Pentru mai mult ajutor cu resursele active (3.0.0)
Folosind bundler (1.0.3)
Folosind mysql2 (0.2.6)
Folosind thor (0.14.4)
Utilizarea șinelor (3.0.0)
Utilizarea șinelor (3.0.0)
Pachetul tău este complet! Utilizați `bundle show` pentru a vedea unde este instalată o bijuterie bundle.

Aceasta înseamnă că tot hardware-ul este instalat și conectat. Dacă ceva nu funcționează, pachetul în sine îl descarcă din rubygems și îl instalează. A cărui axă cu mult timp in urma Nu a funcționat în php, așa că a apărut programul de instalare pentru proiect. Lista pietrelor vechi poate fi găsită în Gemfile la rădăcina proiectului.

Configurare

Acum trebuie să furnizăm detaliile de acces la baza de date pentru proiectul nostru. Deschidem un proiect în NetBeans: Proiect nou -> Ruby -> aplicație Ruby on Rails cu sursă existentă. În opinia mea, acesta va fi (/home/andrey/ruby/app) și numele proiectului (aplicație). Ca Ruby Platforma este aleasă pentru a fi instalată în sistem și nu încorporată în NetBeans. Se pune presiune pentru Finalizare și proiectul este finalizat. Deschideți pseudo-folderul de configurare și fișierul database.yml. Aici trebuie să introduceți un login și o parolă pentru a accesa baza de date, ceea ce este important pentru toate trei (dezvoltare, testare, producție). Otochennya este centrul în care programul nostru va fi lansat,

  • dezvoltare - computerul retailerului,
  • server de productie - exploatare industriala,
  • test — robot în modul de testare pe serverul de integrare continuă sau pe computerul testerului.

șine generează model Nume utilizator:șir parola_hashed:șir salt:șir

Puteți vedea clar ce a generat Rails pentru noi:

invoca active_record
create db/migrate/20101107054200_create_users.rb
creați aplicație/modele/utilizator.rb
invoca test_unit
creați test/unitate/user_test.rb
creați test/fixtures/users.yml

Este clar că acum trebuie să creăm o bază de date. Vikonuemo pentru care:

andrey@vaio:~/ruby/app$ rake db:create
(în /home/andrey/ruby/app)
andrey@vaio:~/ruby/app$ rake db:migrate
(în /home/andrey/ruby/app)
== CreateUsers: migrare ============================================== =======
- create_table(:utilizatori)
-> 0,0061s
== CreateUsers: migrat (0.0063s) ========================================= =============== ==

Consola afișează date suplimentare. Putem vedea în phpmyadmin că există și multe baze de date noi app_development și app_test, precum și tabele în ele. Acum a sosit momentul să adăugați date reale. Pentru cine lansăm consola șinelor

Consola nu este doar o consolă, ci o consolă IRB în contextul programului dumneavoastră. Ca un fund, să facem două koristuvachs:

andrey@vaio:~/ruby/app$ rails console
Se încarcă mediul de dezvoltare (Rails 3.0.0)
irb(principal):001:0> user1 = User.new
=> #
irb(principal):002:0> user1.name = "andrey"
=> "Andrey"
irb(principal):003:0> user1.save
=> adevărat
irb(main):004:0> user2 = User.new
=> #
irb(principal):005:0> user2.name = "vasiliy"
=> "vasiliy"
irb(principal):006:0> user2.save
=> adevărat

irb(principal):007:0> ieșire
andrey@vaio:~/ruby/app$

Să ne uităm la baza de date și, de fapt, au apărut doi comercianți. Aș dori să subliniez că Rails însuși a adăugat coloanele cheii primare și câmpurile create_at (data creată) și updated_at (data modificată) la model.

Modelul nostru este același. Este timpul să lansăm aplicația noastră.

andrey@vaio:~/ruby/app$ server rails
=> Pornirea WEBrick
=> Aplicația Rails 3.0.0 începe în dezvoltare pe http://0.0.0.0:3000
=> Apelați cu -d pentru a detașa
=> Ctrl-C pentru a opri serverul
INFO WEBrick 1.3.1
INFO ruby ​​​​1.9.2 (2010-08-18)
INFORMAȚII WEBrick::HTTPServer#start: pid=4193 port=3000

Se lansează programul, deschidem browserul la adresă și, de asemenea, partea de test.

Destul de sigur, programul rulează. De asemenea, arată pagina HTML originală din folderul /public/index.html. Și vrem să fie dinamic. Deschidem o altă fereastră de consolă (din prima dată când am lansat serverul Ruby - WebRick), mergem în folderul cu proiectul și introducem comanda acolo:

andrey@vaio:~/ruby/app$ rails generează indexul controlerului
creați aplicația/controllers/index_controller.rb
ruta obține „index/index”
invoca erb
creați aplicație/vizualizări/index
creați app/views/index/index.html.erb
invoca test_unit
creați test/funcțional/index_controller_test.rb
invoca ajutorul
creați aplicația/helpers/index_helper.rb
invoca test_unit
creați test/unit/helpers/index_helper_test.rb
andrey@vaio:~/ruby/app$

Aici am creat un controler Index, avem un nou Index și un tip de index.html.erb Robimo Refresh (F5) în NetBeans și vedem fișierele noastre. Miraculos. Acum trebuie să redirecționăm ruta pentru pagina de cap Pe creație avem un controler. Deschideți fișierul rute (Configuration/routes.rb) și decomentați următorul rând de acolo:

# Puteți avea rădăcina site-ului dvs. direcționată cu „rădăcină”
# nu uitați decât să ștergeți public/index.html.
root:to => "binevenit#index"

Vă rugăm să rețineți că suntem bineveniți și, de asemenea, scrieți index. Ei bine, sunt familiarizat cu Zend Framework, motiv pentru care controlerul și acțiunile sale se numesc index.Nu uitați să ștergeți (sau să redenumiți) fișierul public/index.html).

root:to => "index#index"

Actualizăm pagina în browser și, cel mai important, vizualizarea noastră este acum afișată.

Index#index

Miraculos. Acum puteți codifica. Să mergem la controlerul nostru nou creat (Controllere -> index_controller.rb) și să scriem următorul text acolo:

clasa IndexController< ApplicationController
def index
@users = User.find(:all)
Sfârşit
Sfârşit

Acum deschideți vizualizarea Views/index/index.html.erb și scrieți următorul cod acolo:

Index#index


Găsiți-mă în app/views/index/index.html.erb


<% for user in @users -%>
<%=user.name%>

<% end %>

Deci, vorbim despre Rails care trece prin gama de servere și își schimbă numele. Actualizăm pagina și, de asemenea, lista de colaboratori de mai jos.

Index#index

Găsiți-mă în app/views/index/index.html.erb

andrey
vasiliy

Miracol! Adăugarea este făcută!

Păi!

Dacă acest articol te-a ajutat, sau dacă vrei să-mi susții cercetarea, acest blog este cel mai bun mod de a câștiga bani:

Astăzi, pe internet, știu o poveste despre cum James Fend a început Ruby on Rails timp de 12 ani. Mai jos puteți citi o traducere remarcabil de exactă a acestei povești și, sper, veți respira în acest cadru minunat (și limbaj minunat).

În primul rând, aș dori să vă prezint pe Josh Crews (http://joshcrews.com) și vă mulțumesc că m-ați făcut să încep cu Ruby on Rails; fără ajutorul nimănui și fără un an, pe care l-am cheltuit pe aceștia ca să-mi fie mentor, nu am scris nimic astăzi. Dyakuyu.

În a 23-a zi am lansat ideea visului meu, Freelancify.com. Cu doar 12 ani în urmă, eram un antreprenor în tehnologie care a cheltuit mii de dolari pentru a crea un MVP decent (produs minim viabil), așa că am irosit cunoștințele. Unul dintre motive (cum credeam) a fost că începerea a fost prea dificilă pentru mine și ar fi durat multe ore. M-am gândit (la fel ca și multe altele) că programele (și acțiunile) sunt populare cu un set de abilități minunate în probleme avansate și matematică, care le vor completa cu genii de programare. Și acum 12 ani Am acceptat mai bine decât o soluție pentru o oră lungă, cu adevărat lungă. Îmi doresc mai multe idei pentru a nu rămâne fără idei. Acum pot lansa versiuni de lucru, cheltuind mulți bani pe găzduire și raportând multă muncă. Astăzi, acest set de abilități este aproximativ la fel cu a conduce câteva tractoare într-o oră în goana aurului din California, înainte ca toate celelalte docuri vikory să fie doar lopeți. Îi învăț pe toată lumea cum să scrie cod. Aici aș dori să adaug o precizare: mai devreme, după ce am numit postarea „Cum am învățat Rails în 8 ani”, dar pentru a fi precis, mă voi uita ca data de lansare să fie de 12 ani. Cu toate acestea, după 8 ani, mi-am dat seama că știu destule, iar următorii câțiva ani au fost petrecuți de lumea mare pe aceștia pentru a face mai ușor să scoatem cunoștințele din practică, și nu din învățare.

Ce fel de începători am, care au început să învăț Rails?

Sunt web designer cu cunoștințe de HTML și CSS și mă concentrez în principal pe UI și UX design. Cel mai bun lucru pe care îl pot face cu codul real (nu chiar HTML) este capacitatea de a personaliza Wordpress. Într-un cuvânt, nu fac absolut nicio declarație despre cadrul MVC și nici despre modul în care funcționează bazele de date în general. Designul, aspectul și HTML pentru Freelancify au fost create de mine timp de doi ani la începutul anului 2011.

De ce vreau să încep?

Întorcându-mă în 2011, dacă layout-ul este gata, am început să caut codificatorul pentru a face layout-ul funcțional. Dispunerea mingilor este practic gata: am minge câmpuri de text, astfel încât să apară meniuri, formulare, butoane, mesaje, care să conducă acolo unde este necesar etc. Îl cunosc pe tâlhar și, în două cuvinte, flăcăul nu este potrivit pentru mine. Am pierdut achiziția de borg-uri și produsul nu este aproape de finalizare. Așa că l-am contactat pe Josh Crews (pe care l-am întâlnit la evenimentul Ruby on Rails pe care l-am organizat în Nashville) și m-am așezat cu el să văd ce aș putea face cu ceea ce îmi doream.ce s-a pierdut în mine ca tâlhar . Din păcate, repararea și actualizarea codului ar fi durat cel puțin o oră, chiar dacă ar fi fost dezvoltat de la zero de un programator competent. Am devenit descurajat, realizând că nu îmi puteam permite să cheltuiesc din nou mii de dolari pentru dezvoltare de la zero. Și apoi Josh a spus... „ De ce nu te obișnuiești cu Ruby on Rails, acest proiect a fost construit într-un mod miraculos"Și apoi" Pot să țin legătura cu tine timp de o săptămână și să te ajut cu învățarea ta" Am petrecut o noapte întreagă gândindu-mă la asta. Opțiunile mele au fost: să găsesc un loc de muncă confortabil și să plătesc banii ABO Renunță la toate pentru a te obișnui cu Rails și, în sfârșit, bucură-te de cel mai bun ramen pe care doar oamenii îl gătesc în Italia. Eu cred. După ce l-a chemat pe Josh pentru rana ofensivă. am pus totul. Am văzut bănuții care s-au pierdut și i-am împărțit în trei luni (pentru un băiat neînarmat care trăiește singur și fără copii, o mie de dolari pe lună este suficient). E timpul să încep să lucrez, acum încep să lucrez cu normă întreagă. Îmi amintesc: căutările pe Google, Stackoverflow, IRC #RubyOnRails și puterea Rails mă vor acoperi dacă mă blochez, cântând că vor fi destule.

Vin trei luni ale mele - Misiune: scapă de MVP, te săturați, ca să puteți exersa, dar nu „destul de mult”, pentru a-i lipsi pe lacom în fața inamicului

Tyzhni 1 - 3

Tse bula, poate, cea mai dificilă învățare strâmbă, dar nu am renunțat.

Pereții au fost creați pentru oamenii care chiar nu vor să-i părăsească.

Configurarea unei configurații de șine funcționale pentru un începător complet poate fi extrem de frustrantă. Sfat #1: scapă de Mac-ul tău. Sfat #2: Vycort Homebrew, RVM, Git și Heroku (asta este tot ce aveți nevoie pentru a începe). Am petrecut multe zile la instalare, apoi am șters totul și l-am instalat din nou. Repetați de câteva ori și veți fi chemat până la vikoristan Linie de comanda terminal (consolă) și veți înțelege de ce vorbirea funcționează așa cum o face. Apoi, primul lucru pe care l-am făcut, au fost lecțiile TryRuby, Rails for Zombies și Rails Tutorial de Michael Hartl. Nu vă faceți griji că încercați să înțelegeți materialul 120%, ceea ce nu se va întâmpla decât dacă îl puteți citi corect. Am terminat Tutorialul șinelor și am creat un program similar pe Twitter în aproximativ o săptămână, nu sunt complet sigur ce am făcut. Mai târziu, lumea se usucă, încep să realizez că totul începe să aibă sens.

Anii 3 - 6

Cu un supliment Twitter, voi crea un tutorial Rails pentru ajutor, știu cum să o fac. Kerivnitstvo nu m-a făcut un novice, dar acum cunosc secretele suplimentelor create, de la crearea suplimentului în sine și înainte de instalarea acestuia pe Heroku. Tot ce s-a întâmplat în acea oră a fost pierdut. Cum pot începe să citesc corect acum? Lucrul la un proiect real, ce înseamnă pentru mine?. Eu și Josh am decis că mi-ar plăcea să lucrez la Freelancify și să vedem ce aș putea face. Primul lucru pe care l-am făcut a fost să muți tot HTML-ul din cadru și să-l organizez în vizualizări și fișiere parțiale. Am creat platforme de șabloane schelete pentru utilizatori și proiecte. Apoi am început să-mi iau prima mea bijuterie adevărată, Devise. Apoi, mama unui centenar poate, de exemplu, Kozhen Koristuvach va fi mama unui portofoliu. Deși portofoliul poate aparține unui singur Koristuvach. Odată ce ați înțeles cum să lucrați între modele și cum să faceți clic pe discursuri pe care încă le simțiți, viața voastră va deveni mult mai simplă. Dacă sunteți blocat într-o anumită parte și nu puteți scăpa de ea, omiteți-l, este foarte probabil ca, în timp ce vă dezvoltați celelalte posibilități, veți înțelege cum să le implementați pe cele pe care le-ați ratat și.

Anii 6 - 9

Bucată cu bucată, am continuat să citesc, copiend și repetând. Puteam să scot orice discurs pe care îl ținem și apoi, bam, alergam în perete și nu aveam absolut idee ce făceam. Mergând la Stackoverflow, chat IRC #RubyOnRails, RailsCasts sau zâmbind Josh, mă gândesc ca un nebun. Lucrează din nou și din nou și vei învăța să te saturi de tot. Încercați pe bătrân, testând dovezile pe Stackoverflow, pentru a înțelege ce nu funcționează - dar este foarte rău. Înțelegi că nu e nevoie să lucrezi. Și odată ce vei găsi răspunsul, vei începe să înțelegi, DE CE restul nu a mers. Pe la această oră, am început să realizez cât de mare era imaginea discursurilor și, într-un sens propriu, DE CE totul funcționează așa cum funcționează. Simțindu-mă ca un idiot, m-am întors și am refactorizat codul pe care l-am scris anterior pentru a-l face mai eficient. Și la un moment dat am ajuns la stadiul în care totul a început să se așeze la locul lor.

Anul 9 - 12

Eram în modul de activitate neutră, testând Freelancify înainte de etapa de lansare. În acest stadiu, am simțit, la prima vedere, funcțiile din viață. Restul zilei va fi petrecut pentru remedierea diferitelor erori și gafe. Luni asta am lansat site-ul. Din păcate, ca și până acum, sunt departe de a-mi duce demersul... Așa este. Am omis (de dragul acestei postări) alte detalii și puncte tehnice. Tim nu este mai puțin, nu ezita să pui întrebări în comentarii, cu siguranță voi încerca să răspund. James Fend.

P.S. - Indiferent de acestea, ajutorul unui mentor cu care m-am împrietenit imediat m-a ajutat enorm, poți învăța cu ușurință Rails fără el. Sau încercați să cunoașteți o astfel de persoană, mulți dezvoltatori Rails adoră să-și câștige contribuțiile din parteneriate. Căutați conferințe și chat-uri locale.

Am scris această intrare deja de doi ani (publicată pe 27 iunie 2012), dar nu fără a-și pierde relevanța. James Fend a reușit să vândă Freelancify în doar o oră și să investească într-un nou startup, după ce a pierdut prețul pe 27 decembrie 2013. Respect că acest articol este un exemplu miraculos al modului în care o persoană poate atinge un scop. Este suficient să trimiți o scrisoare. :)

Acest proces este dezvăluit prin instalarea și rularea Ruby on Rails.

După ce ai citit asta, vei ști:

  • Cum se instalează Rails, se creează un nou add-on pe Rails și se adaugă programul în baza de date.
  • Structura originală a structurii se bazează pe șine.
  • Principiile de bază ale MVC (Model, View Controller) și design RESTful.
  • Yak shvidko generează un program de cod cob pe Rails.

Admiterea de la această persoană

Acesta este un avantaj pentru începătorii care doresc să lanseze un supliment pe Rails de la zero. Nu admite că ați lucrat anterior cu Rails.

Rails este un cadru pentru dezvoltarea web, scriind programare Ruby. Dacă nu aveți suficiente cunoștințe despre Ruby, poate fi important să începeți imediat să învățați Rails. Există o grămadă de resurse bune în limba engleză dedicate lui Ruby, de exemplu:

Vă rugăm să rețineți că aceste resurse, deși sunt încă minunate, acoperă în continuare versiuni mai vechi de Ruby, cum ar fi 1.6, și în special 1.8, și nu includ multe elemente de sintaxă pe care le veți vedea în dezvoltarea de zi cu zi pe Rail s.

Ce este Rails?

Rails este un cadru pentru dezvoltarea web, scriind programare Ruby. Pentru a crea programarea suplimentelor web într-un mod mai simplu, le vom menționa pe scurt pe cele de care un dezvoltator de skinuri are nevoie pentru a crea un nou proiect. Vă permite să scrieți mai puțin cod în timpul procesului de programare, similar altor limbaje și cadre. Dezvoltatorii Professional Rails subliniază, de asemenea, că dezvoltarea de suplimente web este mai plină de satisfacții.

Sine - Svavilny produs software. Nu este nevoie să muncești, care este cel mai „scurt” mod de a câștiga bani, și există atât de multă dezintegrare încât această metodă stimulează - și, în unele cazuri, depășește alternativele. Odată ce înveți „The Rails Way”, s-ar putea să te trezești semnificativ mai productiv. Dacă vă împotriviți și transferați coduri vechi din alte limbi pe Rails și încercați să modificați șabloanele mai târziu, experiența dvs. cu dezvoltarea va fi mai puțin fericită.

Filosofia Rails include două principii directoare importante:

  • Nu te repeta: DRY este principiul de dezvoltare al PP, ceea ce înseamnă că „O informație este responsabilă pentru apariția sa unică, supra-mondană și autoritară în sistem”. Nu scrie aceleași informații din nou și din nou, codul va fi mai ușor de întreținut și va fi mai extensibil și mai puțin distructiv.
  • Convenție asupra configurației: Rails are gânduri despre în cel mai scurt mod posibil Lucrați fără nicio vorbire în suplimentul web și de dragul mentalității, în loc să vă confundați cu detaliile numeroaselor fișiere de configurare.

Crearea unui nou proiect Rails

Cel mai bun mod de a câștiga acest ghid este să-l parcurgeți pas cu pas. Toți pașii sunt necesari pentru a porni serviciul, dar cu programe, cu excepția faptului că nu mai necesită niciun cod sau cod suplimentar.

Urmând acest exemplu, vei crea un proiect Rails numit blog, un blog web foarte simplu. Înainte de a începe să creați programul, trebuie să reconfigurați șinele în sine.

Utilizați $ pentru a seta rândul de intrare la terminal în dispozitive asemănătoare UNIX. sisteme de operare Oh, mi-aș dori să putem rezolva lucrurile altfel. Dacă utilizați Windows, rândul va arăta ca pictograma c:\source_code>

3.1. Instalarea șinelor

Înainte de a instala șinele, ar trebui să verificați pentru a vă asigura că sistemul are partea frontală necesară instalată. Sunt precedate de Ruby și SQLite3.

Deschideți programele din rândul de comandă. Pe macOS, deschideți Terminal.app, pe Windows, selectați „Run” din meniul Start și tastați „cmd.exe”. Orice echipă care încep cu semnul dolar $ este de vină pentru că a început în linia de comandă. Verificați pentru a vedea ce versiune de Ruby ați instalat:

$ rubin -v rubin 2.5.0

Rails necesită instalarea Ruby versiunea 2.5.0 sau o versiune ulterioară. Dacă numărul versiunii este mai mic, va trebui să instalați o nouă copie a Ruby.

Pentru a instala rapid Ruby și Ruby on Rails în sistem, koristuvach Windows Puteți utiliza Rails Installer. Metode suplimentare de instalare pentru majoritatea sistemelor de operare pot fi găsite la ruby-lang.org.

Dacă utilizați Windows, trebuie să instalați kitul de dezvoltare Ruby Installer.

De asemenea, va trebui să instalați baza de date SQLite3.

Multe sisteme de operare populare asemănătoare UNIX vin cu o versiune frumoasă de SQLite3. Pe Windows, dacă ați instalat Rails utilizând Rails Installer, aveți deja instalat SQLite. Alți utilizatori pot accesa instrucțiunile instalate pe site-ul SQLite3. Vă rugăm să vă asigurați că aveți setările corecte și că sunteți localizat în PATH:

$sqlite3 --versiune

Programul își poate anunța versiunea.

Pentru a instala Rails, utilizați comanda gem install furnizată de RubyGems:

$ gem instalează șine

Pentru a vă asigura că totul este instalat corect, trebuie să introduceți următoarele:

$rails --versiune

Dacă te uiți la Rails 6.0.0, poți continua.

3.2. Crearea de programe Blog

Rails vine cu o serie de scripturi, numite generatoare, concepute pentru a ușura viața unui dezvoltator, făcând tot ce este necesar pentru a începe să lucrezi la sarcinile de compoziție. Unul dintre ele este noul generator de programe, care vă oferă baza unui program Rails, astfel încât să nu aveți nevoie să îl scrieți singur.

Pentru acest generator, deschideți un terminal, mergeți la folderul în care aveți permisiunea de a crea fișiere și scrieți:

$rails blog nou

Puteți crea un supliment Rails din directorul Blog din directorul blog și puteți instala pietre prețioase, pe care le puteți găsi în Gemfile folosind opțiunea de instalare a pachetului.

La Wikoristannya Windows Subsistem pentru Linux, inclusiv notificări Sistemul de fișiere, ceea ce înseamnă că trebuie să activați hemi spring și ascultați , ceea ce puteți face rulând rails new blog --skip-spring --skip-listen .

Puteți vedea toate opțiunile posibile ale liniei de comandă pe care constructorul le acceptă cu programele Rails care rulează rails new-h.

După ce ați creat un supliment pentru blog, accesați acest folder:

Directorul blogului are o serie de fișiere și foldere generate automat care definesc structura programelor Rails. Cea mai mare parte a lucrării din acest tutorial va fi în folderul aplicației, apoi parcurgeți funcțiile folderului pe care Rails îl creează în noul supliment pentru lucru:

Dosar fișier Misiune
aplicație/ Controlere de ceață, modele, ambalaje, ajutoare, rozete, canale, date și active ale programelor dvs. Să aruncăm o privire la acest folder mai târziu.
cos/ Plasați scripturi Rails care pornesc programul, iar directorul poate plasa și alte scripturi pe care le utilizați pentru personalizare, actualizare, implementare sau lansare.
config/ Configurații de rute, baza de date a programelor dvs. etc. Raportul este publicat în Configurarea extensiilor pe șine
config.ru Configurare rack pentru servere bazate pe rack care trebuie configurate pentru a rula programe. Citiți mai multe despre Rack pe site-ul web Rack.
db/ Voi rafina schema bazei de date, precum și migrarea bazei de date.
Gemfile
Gemfile.lock
Aceste fișiere vă permit să specificați ce pietre prețioase sunt necesare pentru programul dumneavoastră Rails. Aceste fișiere sunt vicorizate cu bijuteria Bundler. Citiți mai multe despre Bundler pe site-ul web Bundler.
lib/ Module externe pentru programul dvs.
Buturuga/ Fișierele jurnal de program.
pachet.json Acest fișier vă permite să specificați ce componente npm sunt necesare pentru șine. Acest fișier este învins de Yarn. Citiți mai multe despre Yarn pe site-ul web Yarn.
public/ Un folder care este accesibil apelându-l. Îmbinați fișierele statice și rețelele compilate.
Rakefile Acest fișier este cunoscut și este important de știut care poate fi lansat în linia de comandă. Sarcina de cântec este disponibilă în toate componentele Rails. În loc să modificați fișierul Rakefile, puteți adăuga propriile date adăugând fișierele în directorul lib/tasks al programului.
README.md Acesta este manualul introductiv pentru programul dvs. Urmăriți acest lucru pentru a le informa pe ceilalți care este contribuția dvs., cum să-l antrenați etc.
depozitare/ Fișiere de stocare activă pentru serviciul Disk. Acest lucru este dezvăluit de recenzentul Active Storage Review.
Test/ Teste unitare, dispozitive și alte echipamente de testare. Acest lucru este dezvăluit în suplimentele de testare însoțitoare pe Rails
tmp/ Fișiere de sincronizare (la fel ca fișierele cache și pid)
furnizor/ Loc pentru codurile terților. Un supliment tipic Rails include pietre prețioase externe.
.gitignore Acest fișier îi spune lui git ce fișiere (evident ca șablon) să le ignore. Pentru un raport despre ignorarea fișierelor, consultați GitHub-Ignorarea fișierelor.
.ruby-versiunea Acest fișier este versiunea implicită a Ruby.

Salut Rails!

Pentru început, să afișăm ceva text pe ecran. Pentru ceea ce trebuie lansat, serverul programului dumneavoastră Rails.

4.1. Pornirea serverului web

De fapt, aveți deja un add-on funcțional Rails. Pentru a transfera, trebuie să porniți un server web pe computer. Acest lucru se poate face rulând următoarea comandă din directorul blogului:

Dacă utilizați Windows, sunteți responsabil pentru transmiterea scripturilor din folderul bin direct către interpretul Ruby, care este serverul ruby ​​bin\rails.

Comprimarea activelor JavaScript afectează JavaScript de mijloc de pe sistemul dvs., iar prezența acestuia va duce la comprimarea execjs în timpul comprimării activelor. Asigurați-vă că macOS și Windows vin cu un middleware JavaScript instalat. therubyrhino - middleware recomandat pentru dezvoltatorii JRuby, este inclus în Gemfile, deoarece programul este generat sub JRuby. Puteți afla totul despre susținerea wiki-ului de mijloc în ExecJS

Aceasta este pentru a lansa Puma, un server web care se bazează în întregime pe Rails în scopuri de marketing. Pentru a lansa programul în acțiune, deschideți fereastra browserului și accesați adresa http://localhost:3000. Sunteți responsabil pentru partea implicită cu informații Rails:

Pentru a porni serverul web, apăsați Ctrl+C la terminalul în care rulează. Pentru a vă reconecta, dacă serverul este oprit, trebuie să resetați din nou cursorul liniei de comandă. Pentru majoritatea sistemelor de tip UNIX, inclusiv macOS, acesta va fi simbolul dolarului $. În modul de dezvoltare, Rails în mare parte nu necesită componente de server; Toate modificările pe care le faceți fișierelor sunt acceptate automat de server.

Pagina „Welcome Aboard” este un fel de test pentru noile programe Rails: arată că programele dumneavoastră sunt configurate corect pentru a afișa pagina.

4.2. Salută, Reiki

Pentru ca Rails să spună „Bună ziua”, trebuie să facă, cel puțin, controlorі la sfarsitul zilei(Aspect).

Atribuțiile controlorului includ eliminarea băuturilor cântătoare până când acestea sunt înghețate. Dirijare Depinde care controler respinge orice intrare. Există adesea mai multe rute către controlerul de piele și diferite rute pot fi supuse diferitelor jocuri de actiune. Scopul acțiunii pielii este de a colecta informații pentru prezentare la final.

Scopul finalului este de a afișa aceste informații într-un format ușor de citit. Este important de remarcat importanța precauției în locul din care sunt colectate informații. controlor, nu o întorsătură. Este responsabilitatea dumneavoastră doar să afișați aceste informații. Ulterior, șabloanele sunt scrise într-o nouă limbă, numită eRuby (Embedded Ruby), care este convertită printr-un ciclu de solicitări în Rails înainte de a fi trimisă la bază.

Pentru a crea un controler nou, trebuie să rulați generatorul „controller” și să-i spuneți că doriți un controler numit „Bun venit” cu o acțiune pe numele „index”, astfel:

$ rails generează controler Index de bun venit

Rails creează un număr de fișiere și o rută.

Creați rută app/controllers/welcome_controller.rb obțineți „welcome/index” invocați erb create app/views/welcome create app/views/welcome/index.html.erb invocați test_unit create test/controllers/welcome_controller_test.rb helpers/welcome_helper.rb invoke test_unit invoke assets invoke scss create app/assets/stylesheets/welcome.scss

Cel mai important dintre ele este, evident, controlerul, implementat în app/controllers/welcome_controller.rb și la final, implementat în app/views/welcome/index.html.erb.

Deschideți fișierul app/views/welcome/index.html.erb într-un editor de text. Ștergeți tot codul existent din fișier și înlocuiți-l cu următoarea linie de cod:

După ce completați din nou formularul, veți fi pregătit pentru următorul pas:

„Primul articol!”, „text” => „Acesta este primul meu articol”) permis: false>

Acum această acțiune afișează parametrii statistici care au venit din formular. Cu toate acestea, încă nu este clar. Deci, studiezi parametrii, dar nu faci nimic cu ei.

5.4. Crearea modelului Articolul

Modelele din Rails conțin nume într-unul, iar tabelul corespunzător din baza de date conține nume în multipli. Rails oferă un generator pentru crearea de modele, pe care majoritatea dezvoltatorilor Rails îl folosesc pentru a crea modele noi. Pentru a crea un model nou, rulați această comandă în terminalul dvs.:

$ rails generează model Titlu articol: șir text: text

Pentru comenzi suplimentare, informăm Rails că dorim un model de articol cu ​​un atribut titlu tip și atribut obișnuit text tip de text. Aceste atribute vor fi adăugate automat la tabelul articole și legate la modelul articol.

Rails este proiectat pentru a crea fișiere reduse. Acum avem nevoie doar de app/models/article.rb și db/migrate/20140120191729_create_articles.rb (al tău poate varia puțin). Restul este legat de crearea structurii bazei de date, pe care o vom analiza în continuare.

Active Record este conceput pentru a asocia automat nume de îmbinare cu atributele modelului, ceea ce înseamnă că în modelele Rails nu este nevoie să declarați atribute, Active Record le creează automat.

5.5. Începe migrarea

Yak deja bachili, sinele genereaza model prin crearea fisierului migrarea bazelor de dateîn directorul db/migrate. Migrațiile sunt o clasă Ruby care permite crearea și modificarea ușoară a tabelelor bazei de date. Rails folosește comenzi rake pentru a rula migrarea și poate rula migrarea după ce a fost trimisă în baza de date. Numele fișierului de migrare include o ștampilă de timp pentru a indica faptul că mirosurile sunt create în ordinea în care au fost create.

Dacă vă uitați la fișierul db/migrate/YYYYMMDDHHMMSS_create_articles.rb (rețineți, fișierul dvs. are un nume ușor diferit), veți vedea acolo:

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

Această migrare creează o metodă de modificare care este apelată atunci când începe această migrare. Acțiunile incluse în această migrare sunt și ele negociabile, ceea ce înseamnă că Rails știe să împacheteze modificările făcute prin această migrare dacă doriți să le împachetați ulterior. Dacă executați această migrare, veți crea un tabel de articole cu o coloană de rând și o coloană de text. De asemenea, puteți crea două câmpuri de marcatori de timp pentru a indica ora creării și actualizării statisticilor.

Mai întâi trebuie să folosim comanda rails pentru a începe migrarea:

$ rails db:migrate

Rails iese din această comandă de migrare și vă informează că a creat tabelul Articole.

Creați articole: migrarea ================================================ = === -- create_table(:articole) -> 0.0019s == CreateArticles: migrat (0.0020s) ========================== = ===============

Deci, pe măsură ce urmați pașii din mijlocul dezvoltării, această comandă va fi scrisă în baza de date alocată secțiunii de dezvoltare din fișierul config/database.yml. Dacă doriți să anulați migrarea într-un alt mediu, cum ar fi producția, atunci transmiteți-o în mod explicit la comanda: rails db:migrate RAILS_ENV=production .

5.6. Salvarea datelor cu controlerul

Revenind la ArticlesController, trebuie să modificăm acțiunea de creare pentru a folosi noul model de articol pentru stocarea datelor în baza de date. Deschideți app/controllers/articles_controller.rb și modificați acțiunea de creare după cum urmează:

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

Principalul lucru este că modelul skin Rails poate fi inițializat cu atribute suplimentare care vor fi legate automat la elementele relevante ale bazei de date. În primul rând, acesta este exact ceea ce avem nevoie (rețineți că params[:article] conține aceleași atribute pentru noi). Apoi @article.save este responsabil pentru salvarea modelului în baza de date. Ok, redirecționăm utilizatorul către acțiunea de afișare, care este mult mai târziu.

S-ar putea să vă întrebați de ce A este titlul în Article.new, dacă doriți să publicați o postare despre articol în acest compendiu pentru a scrie în același mod. În acest context, ne referim la clasa numită Article, care se găsește în app/models/article.rb. Numele claselor în Ruby încep cu o mare literatură.

Acum, dacă există validare atunci când dați clic pe @article.save pe o statistică nevalidă, aceasta va fi setată la false . Dacă deschideți din nou app/controllers/articles_controller.rb, veți observa că nu verificăm rezultatul clicului @article.save în acțiunea de creare. Dacă această situație @article.save nu funcționează, trebuie să arătăm din nou formularul koristuvacheva. Pentru a face acest lucru, înlocuiți noul și creați acțiuni în app/controllers/articles_controller.rb cu aceasta:

Def new @article = Article.new end def create @article = Article.new(article_params) if @article.save redirect_to @article altfel redă „nou” final final private def article_params params.require(:article).permit(:title , :text) sfârşit

Acum, noua acțiune creează o instanță nouă numită @article și veți vedea asta în câteva paragrafe.

Vă rugăm să rețineți că în acțiunea de creare am vikorizat randarea în loc de redirect_to dacă salvarea este falsă. Metoda de randare permite ca obiectul @article să fie transmis înapoi la noul șablon dacă este redat. Această redare este executată în cadrul aceleiași comenzi ca și încărcarea formularului, așa că redirect_to notifică browserul că cealaltă interogare a fost dezactivată.

5.11. Actualizări ale articolelor

Am identificat partea „CR” ca CRUD. Acum ne concentrăm pe partea „U”, actualizarea articolelor.

Primul pas este să adăugați acțiunea de editare la ArticlesController, să selectați nou și să creați între acțiuni, așa cum se arată.

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 redați „nou” final Sfârşit

Zaviryuha este o formă cețoasă, similară cu cea pe care o vikorizăm atunci când creăm articole noi. Creați un fișier numit app/views/articles/edit.html.erb și adăugați până data viitoare:

Editare articol

<%= 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 %>

Acum putem specifica formularul pentru acțiunea de actualizare, care nu a fost încă calculat, dar va fi generat în curând.

Trecerea obiectului articol la metoda form_with va insera automat o adresă URL pentru a alimenta forma articolului editat. Această opțiune îi spune lui Rails că dorim ca formularul să fie trimis la metoda PATCH HTTP, astfel încât să știți că nu este valabil pentru renovare resursele sunt supuse protocolului REST.

Apoi, trebuie să creați o acțiune de actualizare în app/controllers/articles_controller.rb. Adăugați-l la acțiunea de creare și utilizați metoda privată:

Def create @article = Article.new(article_params) if @article.save redirect_to @article altfel randați „nou” final end def update @article = Article.find(params[:id]) dacă @article.update(article_params) redirect_to @articol else redă „editează” final final privat def article_params params.require(:article).permit(:title, :text) end

Noua metodă de actualizare este invocată atunci când doriți să actualizați o înregistrare pe care o aveți deja și este nevoie de un hash care conține atributele pe care doriți să le actualizați. Ca și înainte, de îndată ce noul statut este modificat, vrem să arătăm din nou forma de koristuvacheva.

Am corectat din nou metoda article_params, care a fost folosită anterior pentru a crea o acțiune.

Nu este obligatoriu să treceți toate atributele la actualizare. De exemplu, dacă a fost apelat @article.update(title: „Un titlu nou”), Rails ar actualiza atributul titlu, făcând toate celelalte atribute neremediate.

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

De asemenea, adăugat la șablonul app/views/articles/show.html.erb, astfel încât mesajul „Editează” să apară și pe pagina de statistici. Adăugați la sfârșitul șablonului:

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

Prima axă arată ca adăugarea noastră:

5.12. Vikoristannya de parțiale pentru purificarea repetărilor în nenorociri

Pagina noastră de editare este foarte asemănătoare cu pagina nouă, de fapt folosesc același cod pentru afișarea formularului. Să punem în ordine această dublare, vikoristavshi parțial zaviryukhi. Pe parcursul anului, fișierele parțiale încep cu semnul sufix.

Creați un fișier nou app/views/articles/_form.html.erb cu aceasta:

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

<%= pluralize(@article.errors.count, "error") %>a interzis salvarea acestui articol:

    <% @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 %>

Să terminăm imediat aplicația/views/articles/new.html.erb, astfel încât să putem revizui acest nou parțial rescriindu-l complet:

articol nou

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

Și același lucru pentru sfârșitul app/views/articles/edit.html.erb:

Editați articolul

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

5.13. Vizualizarea articolelor

Acum suntem gata să deschidem partea „D” din CRUD, din baza de date. Pe baza REST, traseul de vizualizare a articolelor din rezultatele rezultatelor urmărește traseele atacului:

ȘTERGE /articole/:id(.:format) articole#distruge

Metoda de ștergere de rutare poate duce la rutarea inutilă pentru rutele care rămân fără resurse. Odată ce eliminați acest lucru de pe ruta de obținere principală, puteți crea adrese URL rău intenționate ca aceasta:

uite la pisica asta!

Folosim metoda de ștergere pentru a reduce resursele, iar această rută este asociată cu acțiunea de distrugere din app/controllers/articles_controller.rb, care nu este încă activ. Metoda de distrugere este responsabilă pentru acțiunea CRUD rămasă în controler și, ca și alte acțiuni CRUD publice, este vinovată de inversarea atât a metodelor private, cât și a celor protejate. Hai să yogo dodamo:

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

Întregul ArticlesController din fișierul app/controllers/articles_controller.rb poate arăta astfel:

Clasa ArticoleController< 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

Puteți face clic pe distruge pe obiectele Active Record dacă doriți să le ștergeți din baza de date. Vă rugăm să rețineți că nu trebuie să adăugăm un wrapper la acțiunea pe care o redirecționăm către acțiunea index.

Listarea articolelor

<%= link_to "New article", new_article_path %> <% @articles.each do |article| %> <% end %>
Titlu Text
<%= 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?" } %>

Aici suntem vikorystvo link_to într-un mod diferit. Trecem ruta de denumire ca un alt argument, iar configurarea ca un alt argument. Opțiunile metodei: :delete și data: ( confirma: „Ești sigur?” ) sunt definite ca atribute html5, așa că atunci când un mesaj este trimis, Rails va afișa inițial dialogul de confirmare, apoi va trimite mesajul către metoda de ștergere. Acest lucru se datorează rails-ujs JavaScript suplimentare, care este inclus automat în aspectul programului (app/views/layouts/application.html.erb) atunci când programul este generat. Fără acest fișier, dialogul de confirmare nu va fi afișat.

Istoria noastră, acum puteți crea, privi totul în jur, descoperi și învăța despre statistici.

Oferim un model unui prieten

Când a sosit momentul, dă-i prietenului tău modelul de programat. Un alt model, vă rugăm să adăugați comentarii la articole.

6.1. Model generat

Intenționăm să vikorizăm același generator pe care l-am folosit înainte când am creat modelul Article. De data aceasta creăm un model de comentarii pentru a aplica mesajul articolului. Rulați comanda la terminal:

$ rails generează model Comentariu commenter:string body:text articol:referințe

Această comandă generează următoarele fișiere:

Să aruncăm o privire la app/models/comment.rb acum:

Comentariu de clasă< ApplicationRecord belongs_to:article end

Acesta este foarte asemănător cu modelul articol despre care am discutat mai devreme. Diferența din rând belongs_to:article , care este inserată zv'azokÎnregistrare activă. Veți afla despre conexiuni din următoarea secțiune a suporterului.

Cuvântul cheie (:references), un wiki de comandă bash, este un tip special de date pentru modele. Se creează o nouă coloană în baza de date cu numele modelului prezentat cu _id-ul adăugat, care poate conține valori numerice. Pentru a înțelege mai bine, analizați fișierul db/schema.rb după migrare.

Pe lângă model, Rails a efectuat și o migrare pentru tabelul de bază de date creat:

Clasa 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

Rândul t.references creează o coloană numerică cu numele articol_id, un index pentru cel nou și o cheie străină care indică către coloana id a tabelului articole. În continuare începem migrarea:

$ rails db:migrate

Rails este foarte atent să elimine orice migrare care nu a fost încă lansată pentru baza de date de streaming, în versiunea noastră veți găsi:

Creați comentarii: migrare ================================================= == -- create_table(:comments) -> 0.0115s == CreateComments: migrat (0.0119s) ============================ =============

6.2. Legat de model

Legăturile Active Record vă permit să conectați cu ușurință notele între două modele. Cu comentarii și articole, puteți descrie suta după cum urmează:

  • Comentariul pielii ar trebui să fie un articol.
  • Un articol poate duce la o mulțime de comentarii.

De fapt, este foarte aproape de sintaxa folosită de Wikorist Rails de dragul clarității. Ați creat deja o serie de coduri în modelul Comentariu (app/models/comment.rb) pentru a crea un comentariu astfel încât să fie necesare următoarele statistici:

Comentariu de clasă< ApplicationRecord belongs_to:article end

Trebuie să editați app/models/article.rb, adăugând un alt link:

Articol de clasă< ApplicationRecord has_many:comments validates:title, presence: true, length: { minimum: 5 } [...] end

Acest lucru vă va oferi automat un număr mare de posibilități. De exemplu, dacă aveți un exemplu modificabil @articol, pentru a plasa un articol, puteți elimina toate comentariile pe care le conține acest articol din matrice făcând clic pe @article.comments.

6.3. Adăugarea rutei pentru comentarii

Deoarece avem un controler de bun venit, trebuie să adăugăm o rută, astfel încât Rails să știe la ce adresă vrem să mergem pentru a primi comentarii. Deschideți din nou fișierul config/routes.rb și editați-l astfel:

Resurse:articolele fac resurse:commentariile se termină

Acesta este modul în care se creează comentarii resursă de investițiiîn articole. Aceasta este cealaltă față a înmormântării depozitelor ierarhice, care se vede între articole și comentarii.

6.4. Controler generat

Iubind modelul, am cel mai mare respect pentru controlorul secret. Să folosim din nou același generator pe care l-am folosit înainte:

$ rails generează controler Comentarii

Crearea mai multor fișiere și directoare goale:

Ca și în orice alt caz, cititorii noștri își vor crea comentariile imediat după citirea articolului, iar după adăugarea unui comentariu, vor fi direcționați înapoi către pagina de afișare a articolului și vor citi ce ei. Mentalitatea a fost deja modificată. În legătură cu aceasta, CommentsController-ul nostru servește ca mijloc de a crea comentarii și de a elimina spam-ul, ca atare.

Vom extinde acum șablonul de afișare a articolului (app/views/articles/show.html.erb) pentru a vă permite să adăugați un nou comentariu:

Titlu: <%= @article.title %>

Text: <%= @article.text %>

Adauga un comentariu:

<%= 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 %>

Aici adăugați un formular la pagina articolului care creează un comentariu nou când faceți clic pe acțiunea de creare din CommentsController. Iată o matrice wiki form_with vikory pentru a crea o rută de atașare, cum ar fi /articles/1/comments.

Să scriem create în app/controllers/comments_controller.rb:

Comentarii de clasăController< 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

Aici toate piesele sunt mai pliate, iar tu ai lucrat cu controlerul pentru articole. Acesta este un efect secundar al investiției pe care ați ajustat-o. Kozhen este rugat să comenteze articolul, la orice comentariu al recunoașterii, așa că primul lucru de făcut este să eliminați articolul făcând clic pe găsiți pe modelul articolului.

În plus, codul este îmbunătățit prin utilizarea diferitelor metode disponibile pentru conexiuni. Folosim metoda create pe @article.comments pentru a crea și a salva un comentariu. Acest lucru conectează automat comentariul, astfel încât să poată fi adăugat la melodie.

Deoarece tocmai am creat un comentariu nou, ne întoarcem contribuitorul la articolul original, ajutorul vikoryst article_path(@article) . După cum am aflat deja, faceți clic pe acțiunea de afișare din ArticlesController, care, în felul său, redă șablonul show.html.erb. Dacă doriți să afișați comentarii, accesați app/views/articles/show.html.erb.

Titlu: <%= @article.title %>

Text: <%= @article.text %>

Comentarii

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

Comentator: <%= comment.commenter %>

Cometariu: <%= comment.body %>

<% end %>

Adauga un comentariu:

<%= 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 %>

Acum blogul tău poate adăuga statistici și comentarii și le poate afișa în locațiile dorite.

Refactorizarea

Acum că avem câteva statistici și comentarii utile, să aruncăm o privire la șablonul app/views/articles/show.html.erb. Devenind lung și indestructibil. Să grăbim parțialele la rozvantazhivat yogo.

7.1. Redarea unei colecții de partiale

Începem să creăm un parțial pentru comentarii, care arată toate comentariile pentru articol. Creați un fișier app/views/comments/_comment.html.erb și plasați-l până data viitoare:

Comentator: <%= comment.commenter %>

Cometariu: <%= comment.body %>

Apoi puteți schimba axa app/views/articles/show.html.erb astfel:

Titlu: <%= @article.title %>

Text: <%= @article.text %>

Comentarii

<%= render @article.comments %>

Adauga un comentariu:

<%= 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 %>

Acum redă app/views/comments/_comment.html.erb parțial pentru fiecare comentariu de skin din colecția @article.comments. Deoarece metoda de randare iterează prin colecția de @article.comments, atribuie fiecare comentariu unei variabile locale cu numele, cum ar fi parțial, în meniul nostru derulant de comentarii, care ne este disponibil în partial pentru randare.

7.2. Redare parțială a formei

Să mutăm și secțiunea noului comentariu în partea sa. Din nou, creați un fișier app/views/comments/_form.html.erb pentru a crea:

<%= 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 %>

Apoi schimbați app/views/articles/show.html.erb astfel:

Titlu: <%= @article.title %>

Text: <%= @article.text %>

Comentarii

<%= render @article.comments %>

Adauga un comentariu:

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

O altă randare înseamnă pur și simplu șablonul la parțialul pe care vrem să îl redam, comentarii/formular. Rails trebuie să aibă grijă să pună accent pe acest rând și să înțeleagă că ați dorit să redați fișierul _form.html.erb în directorul app/views/comments.

Obiectul @article este disponibil în orice partiale care sunt redate în versiunea pe care am desemnat-o ca instanță modificabilă.

Vizualizări ale comentariilor

O altă caracteristică importantă a blogului este capacitatea de a detecta spam-ul. Pentru a face acest lucru, trebuie să inserați o linie de comandă și o acțiune de distrugere în CommentsController.

Comentator: <%= comment.commenter %>

Cometariu: <%= comment.body %>

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

Cu presiunea acestui nou mesaj „Destroy Comment” rulați DELETE /articles/:article_id/comments/:id în CommentsController, care va fi apoi folosit pentru a găsi comentariul pe care vrem să-l vedem, așa că haideți să adăugăm acțiunea de distrugere la controlerul nostru (aplicație/controllers/comments_controller.rb):

Comentarii de clasăController< 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

Pentru a distruge, găsiți articolul la care ne uităm, găsiți un comentariu în colecția @article.comments și apoi eliminați-l din baza de date și întoarceți-ne la revizuirea articolului.

8.1. Vedere a obiectelor înrudite

Când ștergeți un articol, comentariile asociate cu acesta vor fi și ele șterse, altfel pur și simplu vor ocupa un loc în baza de date. Rails vă permite să utilizați opțiunea dependentă de pe un link pentru a ajunge la el. Modificați modelul articolului, app/models/article.rb , după cum urmează:

Articol de clasă< ApplicationRecord has_many:comments, dependent: :destroy validates:title, presence: true, length: { minimum: 5 } [...] end

Siguranță

9.1. Autentificare de bază

Dacă vă publicați blogul online, puteți adăuga, edita și șterge articole sau puteți șterge comentarii.

Rails oferă un sistem de autentificare HTTP de bază, ceea ce are sens în această situație.

În ArticlesController, avem nevoie de o modalitate de a bloca accesul la anumite acțiuni care nu necesită autentificare. Aici putem folosi metoda Rails http_basic_authenticate_with, care permite accesul la acțiunile necesare, dacă nu este permisă.

Pentru a utiliza sistemul de autentificare, este important să adăugați ArticlesController la app/controllers/articles_controller.rb. În cazul nostru, dorim ca corespondentul să se autentifice pentru acțiunea pielii, pe lângă indexare și afișare, așa că o vom scrie astfel:

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

De asemenea, dorim să permitem utilizatorilor neautentificați să șteargă comentarii, așa că în CommentsController (app/controllers/comments_controller.rb) vom scrie:

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

Acum, când încercați să creați un articol nou, vi se va solicita să faceți clic pe autentificare de bază HTTP:

Există și alte metode de autentificare disponibile pentru programele Rails. Două suplimente populare pentru Rails, printre altele, sunt Devise și Authlogic.

9.2. Alte gânduri despre siguranță

Securitatea, în special pentru aplicațiile web, are o zonă largă și detaliată. Securitatea programelor dumneavoastră Rails este dezvăluită mai detaliat în ghidul Securitatea aplicațiilor pe șine Cel mai simplu mod de a lucra cu Rails este să salvați toate datele externe în UTF-8. Cu toate acestea, bibliotecile Ruby și Rails îți vor converti adesea datele în UTF-8, dar acest lucru nu va funcționa întotdeauna în mod fiabil, mai ales că toate datele tale sunt UTF-8.

Dacă începeți să mâncați în această problemă, cel mai frecvent simptom este un diamant negru cu un semn de nutriție în mijloc care apare în browser. Un alt simptom primar sunt simboluri precum „ü”, care sunt un substitut pentru „ü”. Rails implementează o serie de pași interni pentru a atenua aceste probleme, care pot fi detectate și corectate automat. Cu toate acestea, dacă există date externe care nu sunt stocate în UTF-8, acest lucru poate duce la probleme precum nedetectarea și corectarea automată de către Rails.

Cele mai importante două tipuri de date care nu sunt în UTF-8 sunt:

  • Ta editor de text Notă: Majoritatea editoarelor de text (cum ar fi TextMate) salvează de obicei fișierele ca UTF-8. Dacă editorul dvs. de text nu funcționează atât de greu, puteți face ca caracterele speciale introduse în șabloanele dvs. (cum ar fi é) să apară ca un diamant cu un semn de putere în browser. Aceasta include și fișierele din traducerea i18N. Majoritatea editorilor care nu stabilesc valoarea implicită la UTF-8 (cum ar fi unele versiuni de Dreamweaver) oferă o modalitate de a schimba valoarea implicită la UTF-8. Faceți bani așa.
  • Baza de date: Rails convertește automat datele din baza de date în UTF-8 din mers. Cu toate acestea, dacă baza de date nu este în mod nativ UTF-8, este posibil să nu poată stoca toate caracterele pe care le introduce utilizatorul. De exemplu, dacă baza de date se află în mijlocul latin-1, iar utilizatorul introduce caractere rusești, ebraice sau japoneze, datele vor fi cheltuite numai în baza de date. Dacă este posibil, utilizați UTF-8 ca mecanism intern în baza de date.

 

 

Tse tsikavo: