[ruby-it] Nell'helper o nel modello?
Pietro Giorgianni
giorgian a gmail.com
Gio 8 Ott 2009 10:55:52 CEST
Il 08 ottobre 2009 10.45, Paolo Montrasio <paolo a paolomontrasio.com> ha scritto:
> Chiedo lumi per sapere se c'è una soluzione elegante a un banale
> problema che ricorre tante volte. Faccio un esempio tra i mille
> possibili.
>
> C'è un modello Model con un campo status. Nelle view in base allo status
> si mostrerà un'icona (es: rossa per status disabilitato, verde per
> status abilitato, etc).
>
> Posso creare un helper status_for_mymodel a cui passo l'oggetto Model e
> che ritorna l'image_tag appropriata. Oppure posso creare un metodo
> icon_tag in Model e fargli ritornare l'immagine. Nella view poi scriverò
> @oggetto.icon_tag
>
> La prima soluzione è più MVC ed è quello che faccio di solito, ma non è
> il massimo trovarsi tutti quei metodi status_for_x, quando i modelli in
> questione sono parecchi. Inoltre è poco object oriented. La seconda lo è
> molto di più e sarebbe più bella da leggere. Per contro è difficile
> accedere ad image_tag da dentro un modello.
>
> Magari c'è una terza e più elegante soluzione. Voi che fate normalmente?
Il problema si può scomporre logicamente in due parti, ovvero:
1) determinare lo stato di un modello;
2) disegnare l'icona per un certo stato.
Il primo problema è compito del modello, il secondo è compito dell'helper.
La mia proposta è quindi che tutti i model che hanno uno stato
rappresentabile graficamente discendano da un capostipite che
definisce il metodo stato, il quale dovrebbe restituire un simbolo (se
sono pochi) o un oggetto, fai tu.
A questo punto scrivi un unico helper che riceva un ModelloConStato,
si faccia dare da questo lo stato e disegni l'icona conseguentemente.
In questo modo il codice è sia MVC che object oriented; l'informazione
sullo stato del modello sta nel modello, l'informazione sull'icona sta
nell'helper.
Piccolo appunto: se non sbaglio, stato nel senso di disabilitato,
abilitato etc. in inglese è state, non status.
pietro
More information about the Ml
mailing list