Rails embedded actions
Investigando le alternative a render_component, tempo fa abbiamo parlato di Cells, mentre oggi vediamo embedded-actions.
Embedded-actions plugin è del tutto simile a render_component, ma pulito, ottimizzato e pienamente supportato da Rails 2.3.x!
Il plugin serve per integrare in maniera semplice e veloce il risultato di un’azione di un controllore qualsiasi all’interno di una vista.
Ad esempio se all’interno di una vista con l’index dei prodotti di un negozio volessimo visualizzare le offerte su certi tipi di spedizione (quindi un’azione di un controllore diverso da quello dei prodotti), basterebbe inserire nella sidebar:
1 2
A differenza di Cells, embedded-actions permette di riutilizzare il codice dei controllori già esistenti, senza creare duplicazioni. Inoltre embedded-actions permette di utilizzare tutte le 4 azioni CRUD, consentendoci non solo di renderizzare un output (come Cells), ma anche di editare, inserire e cancellare elementi.
Le embedded-actions possono ricevere parametri come un normale hash di opzioni:
1
Infine il caching è attivabile con una semplice riga nel controller:
1
Il plugin ha comunque qualche controindicazione: per ogni embedded-action viene istanziato un nuovo controller e le variabili d’istanza non sono condivise tra il controllore “padre” e l’embedded-action, quindi per effettuare un semplice render Cells rimane comunque più veloce e leggero.


Grazie per la segnalazione !
(un minimo di soddisfazione bisogna averla giusto ?)
Volevo segnalare che qualche settimana fa ho provato Cells ma ho avuto un paio di amare sorprese quando è stato il momento di andare in produzione:
1) Cells In ambiente di produzione è ENORMEMENTE più lento rispetto all’ambiente di sviluppo (ho aperto un ticket ad apotonick sul git di cells)
2) Utilizzando Cells al posto dei partial si ottiene un rallentamento dell’applicazione di oltre 10X (sempre nel ticket che ho aperto su git ho inserito un piccolo test per valutare la velocità di Cells e partial)
Quindi ho dovuto tornare indietro ed eseguire un refactoring completo della mia applicazione utilizzando partial (miseriaccia infame !).
Ora proverò questo nuovo plugin chissà che magari funzioni + veloce di Cells…
Grazie ancora !
Ho appena eseguito dei test, diciamo che embed action visualizza 100 celle in circa un terzo del tempo impiegato da cells mentre siamo ancora lontani rispetto ai partial, ho come l’impressione che per eseguire il rendering di componenti senza l’utilizzo di partial i tempi purtroppo sono lunghi in quanto il sistema deve passare inevitabilmente per una serie di strati applicativi che fanno perdere tempo…
Cosa ne pensi ?
Esatto, il motivo è proprio quello: per gestire i partial non c’è bisogno di istanziare nuovi controllori, come invece accade per embedded actions.
Ricorda comunque che embedded actions serve in sitazioni particolari: non va utilizzato ovunque solo per evitare duplicazione di codice, meglio avere un parziale in più ed applicare metodi di caching efficaci.