Cunoștințe, prelegere, înregistrare

În secțiunea 4.4.5 am menționat pe scurt ideea desfășurării în masă, care presupune inițializarea unei variabile Ruby cu un șir de valori:

Pentru a rezolva această problemă, versiunile anterioare ale lui Rails au folosit metoda attr_accessible la nivel de model, dar în Rails 4.0 este mai preferabilă tehnica cu utilizarea așa-numitelor parametri stricți la nivelul controlerului. Acest lucru ne permite să prescrie care parametri sunt obligatorii și care sunt permise. În plus, transferul unor paragate pure hash (așa cum se arată mai sus) va duce la o eroare, i. E. Acum, aplicațiile Rails sunt vulnerabile în mod vulnerabil la vulnerabilitățile implicite.







În acest caz, dorim să solicităm ca parametrii hash să aibă atributul: utilizator și dorim să permitem prezența numelui, emailului, parolei și confirmării parolei (dar numai ei). Putem realiza acest lucru după cum urmează:

Acest cod va returna o versiune a hash-ului de paramuri care conține numai atributele permise (o eroare va fi cauzată dacă lipseste atributul: user).

Pentru a facilita utilizarea acestor parametri, este de obicei introdusă o metodă auxiliară cu numele user_params, care returnează hash-ul de inițializare utilizat în locul paramelor [: user]:

Întrucât user_params va fi folosit numai în cadrul controlerului Utilizatori și nu este nevoie să îl deschidem către utilizatori externi prin intermediul web-ului, îl vom face privat utilizând cuvântul cheie privat, așa cum se arată în Lista 7.22. (Vom discuta privat în detaliu în secțiunea 8.2.1.)

Listing 7.22. Utilizarea parametrilor stricți în acțiunea de creare. app / controllers / users_controller.rb

Cu codul din Listing 7.22, testele pentru trimiterea datelor nevalide trebuie să treacă:







Mesaje de eroare la înregistrare

Aici, obiectul error.full_messages (pe care l-am văzut pe scurt în secțiunea 6.2.2) conține o serie de mesaje de eroare.

Ca și în sesiunea de consolă de mai sus, salvarea eșuată în Listing 7.21 generează o listă de mesaje de eroare asociate obiectului @user. Pentru a afișa un mesaj în browser, facem ca mesajele de eroare să fie incluse în pagina nouă a utilizatorului, așa cum se arată în Lista 7.23. (Scrierea unui test pentru mesajele de eroare este o idee bună și vom lăsa aceste exerciții ca exerciții, vezi secțiunea 7.6). Merită menționat că această parte a raportului de eroare este doar prima încercare; Versiunea finală este prezentată în secțiunea 10.3.2.

Listing 7.23. Cod pentru afișarea mesajelor de eroare în formularul de înregistrare. app / views / users / new.html.erb

Rețineți că redăm parțial "eroare / mesaje_mesaje"; care reflectă convenția generală a Rails, care prescrie plasarea de șabloane parțiale pe care intenționăm să le folosim în mai mulți controlori într-un director distribuit special / distribuit. Aceasta înseamnă că trebuie să creați acest nou director împreună cu fișierul parțial _error_messages.html.erb. Partea însăși este prezentată în Lista 7.24.

Listing 7.24. Parțial pentru afișarea mesajelor de eroare trimise la formularul de înregistrare. app / views / shared / _error_messages.html.erb

Acest șablon parțial introduce câteva noi construcții Rails și Ruby, inclusiv două metode pentru obiectul de eroare Rails. Prima metodă este numărarea, care returnează pur și simplu numărul de erori:

O altă metodă nouă este orice. care (împreună cu gol?) este una din două metode complementare:

Vedem aici că metoda este goală. pe care am văzut-o pentru prima dată în secțiunea 4.2.3 în contextul șirurilor, funcționează și pe obiectul de eroare Rails, returnând adevărat pentru obiectul gol și altfel fals. Orice metodă? este doar opusul golului. Returnează adevărat dacă există un element și altfel fals. (De altfel, toate aceste metode - contorizare, gol și orice - lucrăm la matrice Ruby.) Vom găsi o aplicație bună în acest sens în Secțiunea 10.2.)

O altă idee nouă este pluralizarea ajutorului de text. În mod implicit, acesta nu este disponibil în consolă, dar îl putem activa în mod explicit prin modulul ActionView :: Helpers :: TextHelper. Am descoperit acest lucru căutând plural în API-ul Rails

Vedem aici că pluralizarea ia un argument întreg și returnează un număr cu versiunea corectă a pluralului celui de-al doilea argument. În centrul acestei metode este un inflexor puternic care știe să convertească la plural un număr imens de cuvinte (inclusiv multe cu un număr plural incorect):

Ca rezultat, codul







Articole similare

Trimiteți-le prietenilor: