2011-01-10 13 views
14

Estoy tratando de usar el atributo múltiple HTML5 en un campo de archivo en un formulario anidado.¿Cómo se correlaciona el campo de carga de múltiples archivos HTML5 con un modelo anidado en Rails 3?

Los modelos son los siguientes:

class Album < ActiveRecord::Base 

    has_many :album_images 
    has_many :images, :through => :album_images 

    accepts_nested_attributes_for :images 

end 

class Image < ActiveRecord::Base 

    has_many :album_images 
    has_many :albums, :through => :album_images 

    mount_uploader :filename, ImageUploader 

    validates_presence_of :filename 

end 

La vista:

<%= semantic_form_for @album, :url => upload_path do |f| %> 
    <%= f.inputs do %> 
     <%= f.input :name, :label => 'Album title' %> 
    <% end %> 

    <%= f.input :images, :as => :file, :input_html => {:multiple => true} %> 

    <%= f.buttons do %> 
     <%= f.commit_button 'Upload' %> 
    <% end %> 
    <% end %> 

Cuando uso para el campo de archivo:

<%= f.input :images, :as => :file, :input_html => {:multiple => true} %> 

me sale:

<input id="album_images" multiple="multiple" name="album[images][]" type="file"> 

Lo que no parece correcto desde Creo que Quiero establecer el nombre de archivo en el objeto directamente, pero no estoy seguro de esto. Cuando intento cargar con este campo, los parametros de entrada parecen:

"album"=>{"name"=>"2011-01-09", "images"=>["IMG_0052.JPG", "IMG_0053.JPG", "IMG_0054.JPG", "IMG_0055.JPG"]} 

Sin embargo, me sale el siguiente error:

ActiveRecord::AssociationTypeMismatch (Image(#2157004660) expected, got String(#2151988680)): 

bien, que el error se debe probablemente al hecho de que sólo recibió un nombre de archivo y no un objeto de imagen. Así que en lugar, yo uso para el campo de archivo:

<%= f.input :images, :as => :file, :input_html => {:multiple => true, :name => 'album[images][][filename]'} %> 

para los que Formtastic genera:

<input id="album_images" multiple="multiple" name="album[images][][filename]" type="file"> 

Los parametros de entrada parecen:

"album"=>{"name"=>"2011-01-09", "images"=>[{"filename"=>"IMG_0052.JPG"}, {"filename"=>"IMG_0053.JPG"}, {"filename"=>"IMG_0055.JPG"}]} 

Pero entonces me sale este error:

Image(#2153868680) expected, got ActiveSupport::HashWithIndifferentAccess(#2158892780) 

Entonces, ¿cómo? ¿Una vez que configuras este mapeo archivado de entrada de múltiples archivos en Rails?

Gracias.

+1

Downvoted porque nunca proporcionó ningún comentario a la respuesta a continuación y nunca volvió a actualizar su pregunta si la hubiera/no había resuelto. –

Respuesta

2

Es necesario incluir en su :html => { :multipart => true }form_for (o, en su caso semantic_form_for) llamada para que su etiqueta de <form> se establece para apoyar la carga de archivos.

Luego vuelve a la sintaxis original para f.input y debería estar en ese momento.

Cuestiones relacionadas