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