2011-05-01 12 views
5

Tengo un modelo llamado publicaciones, y tiene muchos archivos adjuntos.Forma anidada con clip

El modelo de archivos adjuntos utiliza clip.

Hice un modelo independiente para la creación de archivos adjuntos que funciona muy bien, esta es la vista según las instrucciones aquí (https://github.com/thoughtbot/paperclip):

<% form_for :attachment, @attachment, :url => @attachment, :html => { :multipart => true } do |form| %> 
    <%= form.file_field :pclip %> 

    <%= form.submit %> 

<% end %> 

La forma anidada en los puestos se ve así:

<% @attachment = @posts.attachments.build %> 
<%= form_for(@posts) do |f| %> 
    <% if @posts.errors.any? %> 
    <div id="error_explanation"> 
     <h2><%= pluralize(@posts.errors.count, "error") %> prohibited this post from being saved:</h2> 

     <ul> 
     <% @posts.errors.full_messages.each do |msg| %> 
     <li><%= msg %></li> 
     <% end %> 
     </ul> 
    </div> 
    <% end %> 

    <div class="field"> 
    <%= f.label :name %><br /> 
    <%= f.text_field :name %> 
    </div> 
    <div class="field"> 
    <%= f.label :description %><br /> 
    <%= f.text_area :description %> 
    </div> 
    <div class="field"> 
    <%= f.fields_for :attachments, @attachment, :url => @attachment, :html => { :multipart => true } do |at_form| %> 

     <%= at_form.file_field :pclip %> 

    <% end %> 
    </div> 

    <div class="actions"> 
    <%= f.submit %> 
    </div> 
<% end %> 

Se crea un registro adjunto, pero está vacío. El archivo no está cargado. Mientras tanto, la publicación se ha creado con éxito ...

¿Alguna idea?

Respuesta

9

se echa en falta la opción: multiparte en su definición de formulario:

<% @attachment = @post.attachments.build %> 
<%= form_for @post, :html => { :multipart => true } do |f| %> 
    <% if @post.errors.any? %> 
    <div id="error_explanation"> 
     <h2><%= pluralize(@post.errors.count, "error") %> prohibited this post from being saved:</h2> 

     <ul> 
     <% @post.errors.full_messages.each do |msg| %> 
     <li><%= msg %></li> 
     <% end %> 
     </ul> 
    </div> 
    <% end %> 

    <div class="field"> 
    <%= f.label :name %><br /> 
    <%= f.text_field :name %> 
    </div> 
    <div class="field"> 
    <%= f.label :description %><br /> 
    <%= f.text_area :description %> 
    </div> 
    <div class="field"> 
    <%= f.fields_for :attachments, @attachment do |at_form| %> 

     <%= at_form.file_field :pclip %> 

    <% end %> 
    </div> 

    <div class="actions"> 
    <%= f.submit %> 
    </div> 
<% end %> 

Además, la variable de @posts realmente debe ser @post (única instancia ActiveRecord en lugar de un conjunto de instancias de ActiveRecord).

+2

+1 Además, no creo que lo necesite en el bloque 'fields_for'. – Preacher

+0

Buena captura, me perdí esa. Actualicé el fragmento de código. También eliminó la opción: url (en los campos_para el nivel), que no pertenece allí. – mbreining

+0

¡Gracias muchachos! – Elliot