Utilizzare un parziale in un parziale?

4

Sono un principiante di Rails, quindi abbi pazienza con me.

Ho alcuni posti, alcune pagine, alcuni partial che usano:

<%= link_to "delete", post, method: :delete,
                                 data: { confirm: "You sure?" },
                                 title: post.content %>

Avrebbe senso renderlo parziale visto che è usato ripetutamente, a volte anche in altri partial?

È o.k. mettere i partial in partial?

    
posta Greg Wallace 27.07.2012 - 22:56
fonte

2 risposte

3

Vorrei provare a limitare l'uso dei partial all'interno di altri partial, dal momento che può influenzare negativamente la velocità di rendering della vista (ad es. il rendering di molti partial è molto lento), ma detto questo, devo dire che sì va bene usare parziali all'interno di altri parziali.

Un paio di cose che dovresti probabilmente rendertene conto:

  1. Può diventare fonte di confusione come tutti gli inferi, specialmente quando:
    • stai passando un sacco di variabili locali.
    • stai eseguendo il rendering di raccolte, ovvero eseguendo il ciclo su un partial con un array di qualche tipo.
  2. Escludendo dal fatto che tu stia facendo questa domanda, probabilmente non sai che stai già rendendo parziali all'interno di partial.
    • ciò che intendo con questo, è che il layout (presumibilmente "application.html.erb") sarà davvero l'unico non parziale in una vista.
    • Ogni volta che hai un'azione resa da una vista, cioè "mostra", "nuova", "modifica" (supponendo che tu sia riposante), dovresti capire che la vista corrispondente (ad esempio "show.html.erb") 'ad esempio) è un rendering parziale all'interno del file di layout principale.
    • Quindi qualsiasi utilizzo di un partial che tu stesso fai ('_users.html.erb' o che cosa hai) è in realtà già un 'partial in un altro partial'.

Mi sento come Inception, vero? :)

Per quanto riguarda il tuo esempio specifico, sono d'accordo con l'altro che dovresti probabilmente usarlo come aiuto. E puoi usarlo su molti modelli fintanto che ne hai abbastanza astratti nell'assistente, in questo modo:

def delete_link_for(polymorphic_object, method_symbol)
   link_to "delete", polymorphic_object, method: :delete,
                             data: { confirm: "You sure?" },
                             title: post.send(method_symbol)
end

In questo modo puoi invocare in questo modo:

 <%= delete_link_for(@post, :content) %>
 <%= delete_link_for(@user, :username) %>

ecc.

    
risposta data 18.08.2012 - 12:11
fonte
2

Penso che un modello sia eccessivo per uno smippet così piccolo. Invece, vorrei scrivere un metodo di supporto .

    
risposta data 28.07.2012 - 00:39
fonte

Leggi altre domande sui tag