2010-08-06 12 views
8

Sto cercando come gli altri tipicamente organizzano i loro partial per una risorsa polimorfa.Organizzare i partial per una risorsa polimorfa

Esempio:

ho Image che è polimorfa e seconda di ciò che è imageable, voglio visualizzare le cose leggermente diverse.

Ho un numero images/_image parziale e può chiamare render imageable.images. La mia mentalità corrente è di avere il mio controllo parziale dell'immagine di quale tipo è imageable e quindi di avere un altro parziale, specifico per quel caso. La mia organizzazione sarebbe qualcosa sulla falsariga di:

images/ 
    _image.html.haml 
    _product.html.haml 
    _post.html.haml 
    _user.html.haml 

mio _image parziale sarebbe simile:

%div 
    = render :partial => "images/#{imageable.type}" 

Questo sembra un cattivo approccio, o flat out l'approccio sbagliato? Penso che sarebbe molto più bello chiamare lo render imageable.images da qualsiasi parte che dover chiamare il numero render :partial => ... dappertutto.

Qualsiasi idea sarebbe molto apprezzata. Come l'hai fatto?

EDIT: È passato molto tempo e mi sto ancora chiedendo se qualcuno ha qualche input su questo. Lanciare una taglia per vedere se questo attira l'attenzione.

risposta

1

Sono un po 'sotto il tempo, quindi non posso testarlo. Ma dovresti semplicemente inserire <%= render imageable.images %> e vedere cosa dice. Dovrebbe funzionare perché dovrebbe usare .modelname o .class :) Se non funziona vorrei fare quello che stai facendo come menzionato sopra. Se non funziona, per favore commenta con quello che dice, perché allora probabilmente creerò una patch per il nucleo delle rotaie per quello, davvero dovrebbe funzionare come tale.

+0

Ciao Mohammad, grazie per la risposta. Probabilmente dovrei taggare la mia domanda con quella soggettiva (che potrebbe rendere un po 'imbarazzante la mia taglia). Ma, sì, come hai fatto notare, sicuramente funziona. La mia domanda è più soggettiva nel senso di come le persone gestiscono queste cose. Il modo in cui organizzo questi file mi sembra sempre "sporco" e cercavo un po 'più di informazioni su come gli altri lo fanno. Saluti. – theIV

+0

Lo farei '<% = render resource%>' è più pulito. Anche se potrei non sapere che sarà un polimorfico parziale destro del pipistrello, non è così difficile scoprirlo dato che sono tutti lì dentro e nel peggiore dei casi basta aggiungere un commento sopra la linea o qualcosa del genere :) –

1

Mi sa che la tua idea originale è sulla strada giusta, con modifiche di minore entità:

= render imageable.images 

# images/_image.html.haml 
= render image.imageable_type.underscore, :object => image.imageable, :image => image 

# images/_product.html.haml 
// Custom code for product image (with product and image local variables) 
2

Nel codice ora non è chiaro che in realtà è un _product_image.

penso che l'intenzione in Rails è quello di fare in questo modo:

shared/ 
    _image.html.haml 
    imageable/ 
     _product.html.haml 
     _post.html.haml 
     _user.html.haml 

Poi nel _image parziale si chiama:

render :partial => imageable/#{image.type}", :image => image

Ora è chiaro dalla vostra struttura di directory che cosa il tuo polimorfismo è.

(nota: ho usato la directory shared, ma naturalmente quando l'immagine parziale non è effettivamente condivisa tra vista dovrebbe essere in qualche directory vista come se si dispone in realtà un images_controller la directory deve essere chiamato images)

2

Penso che tu abbia il giusto approccio, ma penso che il passo finale per la pulizia sia eliminare le immagini parziali che selezionano un altro parziale, invece di assegnare quel comportamento a un aiuto. qualcosa di simile a...

module ImagesHelper 
    def show_image(imageable) 
    render :partial => "images/#{imageable.class.to_s.tableize}" 
    end 
end 

?

Problemi correlati