Dove definire oggetti dati specifici della vista in Rails

5

Sfondo: ci sono diversi posti nella nostra app in cui vogliamo visualizzare le informazioni orientate alla data su un calendario. La event_calendar gem sembra carina e ha molte recensioni, quindi è quello che sto pensando di usare. Tuttavia, è progettato per funzionare con un modello. Non aggiornerò i nostri modelli esistenti per soddisfare le sue esigenze, quindi creeremo una classe DTO e una funzione helper per costruire una serie di istanze dai nostri modelli esistenti.

La mia domanda è: dove dovrebbe vivere la classe DTO? Sembra che debba essere definito all'interno di ViewHelper , ma questo violerà DRY non appena utilizzo il calendario per due modelli (nota: le funzioni di supporto saranno diverse, sarà solo la classe DTO che rimarrà la stessa).

Quindi, c'è una posizione standard nell'albero delle directory di Rails in cui vivono le classi non correlate ai modelli?

O c'è un modo migliore / più idiomatico per farlo? Un pensiero che ho avuto è stato quello di rendere la mia funzione di supporto decorare le istanze di modello esistenti con i metodi che event_calendar vuole vedere.

    
posta kdgregory 02.03.2012 - 16:00
fonte

4 risposte

2

Penso che l'equivalente dell'oggetto Data Transfer che menzioni sia chiamato presentatore nell'ecosistema Rails.

Su progetti con pochi relatori, li ho visti posizionati nella directory /lib , ma potresti anche creare una directory /app/presenters .

Controlla anche questo post del blog sui presentatori di Steve Klabnik.

    
risposta data 08.03.2012 - 23:51
fonte
1

Sembra che desideri utilizzare funzionalità ripetitive non di modello. Se ho ragione, allora puoi avvolgerlo con Module e inserirlo in app \ models folders

Potresti dare un'occhiata al seguente articolo link

    
risposta data 09.03.2012 - 04:07
fonte
1

Ho finito per creare una classe base in lib , che definisce gli attributi e alcuni metodi di supporto. Ho tenuto una lezione dentro l'helper, ma tutto ciò che ha è un initialize (è lì che succede la cosa interessante). Ho anche una funzione di supporto che fa map per convertire gli oggetti.

Leggendo il blog di Steve Klabnik, ho trovato la seguente citazione, che a mio avviso riassume i miei sentimenti in questo. Penso di averlo superato.

Maybe it's that lib/ feels like such a junk drawer

    
risposta data 10.03.2012 - 14:28
fonte
0

Se trovi che stai ripetendo molto, potresti dare un'occhiata alla gemma di celle . Le celle sono fondamentalmente mini-controller che sono particolarmente utili quando si creano widget e simili.

Il readme lo riassume bene:

Say you’re writing a Rails online shop - the shopping cart is reappearing again and again in every view. You’re thinking about a clean solution for that part. A mixture of controller code, before-filters, partials and helpers?

No. That sucks. Take Cells.

    
risposta data 09.03.2012 - 12:21
fonte

Leggi altre domande sui tag