2011-09-29 7 views
10

Quindi sto costruendo un modulo nidificato con un modello Campagne e un modello di Sites in cui Campaigns ha diversi siti. Nelle mie campagne formano ho:Rails nested forms con immagini

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

E poi in _site_fields.html.erb ho:

<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> 

Tutto questo sembra funzionare (incredibilmente), ma mi piacerebbe avere in anteprima l'immagine già caricata per un sito particolare nel modulo. Quindi, dove ho f.file_field: image Mi piacerebbe anche essere in grado di mostrare un'anteprima di quell'immagine. Il problema è che non riesco ad accedere al sito corrente da renderizzare perché sto usando f.fields_for.

Qualche suggerimento? Sono sicuro che mi manca qualcosa di relativamente semplice.

Grazie in anticipo!

risposta

23

Dalla oggetto form helper (nel tuo caso costruttore e f) si dovrebbe essere in grado di accedere al modello a oggetti e l'url la vostra ricerca di come questo:

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

Il image in image _url dipende da come hai chiamato l'attributo, ma per il tuo esempio questo dovrebbe essere corretto.

0

si può decidere di indagare la gemma graffetta: https://github.com/thoughtbot/paperclip

Ti permette di fare questo per mostrare una miniatura dell'immagine esistente.

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

Grazie! In realtà sto usando Paperclip in questo momento, la domanda è dove ottenere l'oggetto @thing dal momento che non sto iterando attraverso tutti i siti che appartengono a una campagna in qualsiasi luogo - sto solo usando fields_for. – dshipper

+0

Puoi pubblicare il tuo codice controller in modo che io possa capire cosa devi fare? – David