2010-08-06 21 views
8

Estoy buscando cómo otros suelen organizar sus parciales para un recurso polimórfico.Organización de parciales para un recurso polimórfico

Ejemplo:

tengo Image que es polimórfico y dependiendo de lo que es imageable, quiero mostrar cosas ligeramente diferentes.

Tengo un parcial images/_image y puedo llamar al render imageable.images. Mi mentalidad actual es hacer que mi imagen compruebe parcialmente qué tipo es imageable y luego tengo otra parcial, específica para ese caso. Mi organización sería algo a lo largo de las líneas de:

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

Mi _image parcial sería algo como:

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

¿Le parece esto como un mal enfoque, o de plano el enfoque equivocado? Creo que sería mucho mejor simplemente llamar al render imageable.images desde cualquier lugar que tener que llamar al render :partial => ... en cualquier lugar.

Cualquier idea sería muy apreciada. ¿Lo has hecho?

EDITAR: Ha pasado mucho tiempo y todavía me pregunto si alguien tiene alguna opinión sobre esto. Lanzando una recompensa para ver si eso atrae algo de atención.

Respuesta

1

Estoy un poco mal tiempo así que no puedo probarlo. Pero solo debe poner <%= render imageable.images %> y ver lo que dice. Debería funcionar porque debería estar usando .modelname o .class :) Si no funciona, haría lo que está haciendo como se mencionó anteriormente. Si no funciona, por favor comente con lo que dice, porque entonces probablemente haga un parche en el núcleo de los rieles para eso, realmente debería funcionar como tal.

+0

Hola, Mohammad, gracias por la respuesta. Podría decirse que debería etiquetar mi pregunta con subjetiva (lo que podría hacer que mi recompensa sea un poco incómoda). Pero, sí, como has señalado, definitivamente SI FUNCIONA. Mi pregunta es más subjetiva en el sentido de cómo las personas manejan estas cosas. La forma en que organizo estos archivos siempre me parece "sucia" y estaba buscando un poco más de información sobre cómo lo hacen otras personas. Aclamaciones. – theIV

+0

Lo haría '<% = render resource%>' es más limpio imo. Si bien es posible que no sepa que va a ser un derecho polimórfico parcial del murciélago, no es tan difícil de descubrir ya que están todos allí y, en el peor de los casos, simplemente agregue un comentario sobre la línea o algo :) –

1

Creo que su idea original está en el camino correcto, con un pequeño ajuste:

= 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

En su código ahora no está claro que en realidad es un _product_image.

creo que la intención de los carriles es hacerlo de esta manera:

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

Luego, en el _image parcial que llamar:

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

Ahora bien, es claro a partir de la estructura de directorios lo tu polimorfismo es

(nota: He utilizado el directorio shared, pero por supuesto cuando su imagen parcial en realidad no es compartida entre las vistas que debería estar en algún directorio vista como si realmente tiene una images_controller el directorio debe llamarse images)

2

Creo que tiene el enfoque correcto, pero creo que el paso final para la limpieza es eliminar las imágenes parciales que seleccionan otro parcial, en lugar de eso, pasen ese comportamiento a un ayudante. algo como...

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

?

Cuestiones relacionadas