Ruby on Rails parziali


Esempio

I modelli parziali (partial) sono un modo per rompere il processo di rendering in blocchi più gestibili. I partial consentono di estrarre parti di codice dai modelli per separare i file e riutilizzarli anche nei modelli.

Per creare un partial, crea un nuovo file che inizia con un carattere di sottolineatura: _form.html.erb

Per rendere un partial come parte di una vista, usa il metodo render nella vista: <%= render "form" %>

  • Nota, il carattere di sottolineatura viene omesso durante il rendering
  • Un partial deve essere reso utilizzando il suo percorso se si trova in una cartella diversa

Per passare una variabile nel partial come variabile locale, usa questa notazione:

<%= render :partial => 'form', locals: { post: @post } %>

I partial sono utili anche quando è necessario riutilizzare esattamente lo stesso codice ( filosofia DRY ).

Ad esempio, per riutilizzare il codice <head> , creare un partial denominato _html_header.html.erb , inserire il codice <head> da riutilizzare e rendere il partial quando necessario: <%= render 'html_header' %> .

Oggetti parziali

Anche gli oggetti che rispondono a to_partial_path possono essere visualizzati, come in <%= render @post %> . Di default, per i modelli ActiveRecord, questo sarà qualcosa di simile a posts/post , quindi in realtà il rendering di @post , il file views/posts/_post.html.erb sarà reso.

Un post denominato locale verrà assegnato automaticamente. Alla fine, <%= render @post %> è una mano breve per <%= render 'posts/post', post: @post %> .

Possono anche essere fornite raccolte di oggetti che rispondono a to_partial_path , come <%= render @posts %> . Ogni oggetto sarà reso consecutivamente.

Global Partials

Per creare un partial globale che può essere utilizzato ovunque senza fare riferimento al suo percorso esatto, il partial deve essere posizionato nel percorso views/application . L'esempio precedente è stato modificato di seguito per illustrare questa funzionalità.

Ad esempio, questo è un percorso per app/views/application/_html_header.html.erb: parziale app/views/application/_html_header.html.erb:

Per rendere questo parziale globale ovunque, usa <%= render 'html_header' %>