2011-09-29 18 views
10

Estoy construyendo un formulario anidado con un modelo de Campañas y un modelo de Sitios donde Campañas tiene muchos sitios. En mis campañas forman tengo:Rieles Formas anidadas con imágenes

<%= f.fields_for :sites do |builder| %> 
    <%= render "site_fields", :f => builder %> 
<% end %> 

Y luego en el _site_fields.html.erb tengo:

<div class="field"> 
<%= f.label :title %><br /> 
<%= f.text_field :title %> 
</div> 
<%= f.label "Image"%><br> 
<%= f.file_field :image %> 
<div class="field"> 
<%= f.label :url %><br> 
<%= f.text_field :url %> 
</div> 

Todo esto parece funcionar (sorprendentemente) pero me gustaría tener una vista previa de la imagen ya cargada para un sitio en particular en el formulario. Entonces, donde tengo f.file_field: image, también me gustaría poder mostrar una vista previa de esa imagen. El problema es que no parece poder acceder al sitio actual que se está procesando porque estoy usando f.fields_for.

¿Alguna sugerencia? Estoy seguro de que me falta algo relativamente simple.

¡Gracias de antemano!

Respuesta

23

Desde el objeto asistente de formulario (en su caso constructor y f) debe ser capaz de acceder al objeto de modelo y la url de su búsqueda de la siguiente manera:

<%= image_tag f.object.image_url(:thumb) %> 

El imagen en imagen _url depende de cómo haya nombrado el atributo, pero para su muestra esto debería ser correcto.

0

es posible que desee investigar la joya clip: https://github.com/thoughtbot/paperclip

Se le permite hacer esto para mostrar una miniatura de la imagen existente.

<div class="field"> 
    <% if @thing.logo? %> 
    <%= image_tag @thing.logo(:thumb) %><br/> 
     Change 
    <% end %> 
    <%= f.label :logo %> 
    <%= f.file_field :logo %> 
    </div> 
+0

Gracias! Actualmente estoy usando Paperclip, la pregunta es dónde conseguir el objeto @thing ya que no estoy iterando a través de todos los sitios que pertenecen a una campaña en cualquier lugar. Solo estoy usando fields_for. – dshipper

+0

¿Puedes publicar tu código de controlador para que pueda resolver lo que tienes que hacer? – David