Supponiamo che un controller debba passare una dozzina di variabili ad
una view. Tra una cosa e l’altra il metodo del controller diventa
necessariamente piuttosto grosso.
In mancanza di helper per i controller (fare metodi privati nel
controller stesso o in application_controller mi piace poco) una
strategia che ho usato è creare un modello slegato dal db che encapsuli
la logica del metodo del controller, istanziarlo, fargli fare quel che
deve e passarlo alla view che poi ne estrarrà dagli attributi i valori
che le servono.
In questo modo il controller rimane magro, per contro si aggiunge un
livello di indirettezza sia nel controller sia nella view rallentando la
lettura del codice.
Mi chiedevo se ci sono alternative e se ci sono best practice
riconosciute.
Un hash di istanza, perchè scomodare la sessione?
A me non piace creare un model per questo scopo, mi piace meno che i
metodi privati del controller. Se la logica da sharare è tanta e non
conviene inserirla nel relativo model o sotto l’application controller,
io farei moduli o classi da mettere sotto lib
A me non piace creare un model per questo scopo, mi piace meno che i
metodi privati del controller. Se la logica da sharare è tanta e non
conviene inserirla nel relativo model o sotto l’application controller,
io farei moduli o classi da mettere sotto lib
Passare tante variabili e’ un po’ sospetto… quantomeno passerei un hash
o
ancora meglio un oggetto.
Siccome questi valori probabilmente mapperebbero su attributi dei
modelli,
potrebbe essere utile un approccio tipo presenter pattern ( Jay Fields' Thoughts: Rails: Presenter Pattern) o
comunque
qualcosa basato sulla delegation… poi se metterli in
controller_helpers o
lib e’ questione di gusti… io propenderei per lib.
Sto leggendo i post sul pattern presenter. Avevo fatto qualcosa di
simile per certe parti di una mia applicazione ma l’approccio che
descrivono è più generale e sembra essere quel che mi serve.
Grazie!
Paolo
Luca De Marinis wrote:
Passare tante variabili e’ un po’ sospetto… quantomeno passerei un hash
o
ancora meglio un oggetto.
Siccome questi valori probabilmente mapperebbero su attributi dei
modelli,
potrebbe essere utile un approccio tipo presenter pattern ( Jay Fields' Thoughts: Rails: Presenter Pattern) o
comunque
qualcosa basato sulla delegation… poi se metterli in
controller_helpers o
lib e’ questione di gusti… io propenderei per lib.