2011-01-10 8 views
14

Ich versuche, das HTML5-Mehrfachattribut für ein Dateifeld in einer verschachtelten Form zu verwenden.Wie wird das HTML5-Feld zum Hochladen mehrerer Dateien einem verschachtelten Modell in Rails 3 zugeordnet?

Die Modelle sind wie folgt:

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 

Aussicht:

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

Wenn ich für das Feld Datei:

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

ich:

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

Das scheint nicht richtig seit Ich denke, Ich möchte den Dateinamen direkt auf das Objekt, aber ich bin mir nicht sicher. Wenn ich versuche, mit diesem Bereich zu laden, die eingehenden params wie folgt aussehen:

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

Allerdings habe ich die folgende Fehlermeldung erhalten:

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

OK, ist dieser Fehler wahrscheinlich aufgrund der Tatsache, dass es nur erhielt einen Dateinamen und kein Bildobjekt. Anstatt also verwende ich für das Dateifeld:

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

für die Formtastic erzeugt:

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

Die eingehenden params wie folgt aussehen:

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

Aber dann bekomme ich diesen Fehler:

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

So wie Doe S one gehen über die Einrichtung dieser mehrere Datei Eingabefeld Mapping in Rails?

Danke.

+1

Downvoted, weil Sie nie eine Antwort auf die Antwort unten gegeben haben und nie zurück kamen, um Ihre Frage zu aktualisieren, wenn Sie es nicht gelöst hatten/hatten. –

Antwort

2

Sie benötigen :html => { :multipart => true } in Ihrem form_for (oder in Ihrem Fall semantic_form_for) -Aufruf zu schließen, so dass Ihr <form> Tag gesetzt ist das Hochladen von Dateien zu unterstützen.

Dann zurück zu Ihrer ursprünglichen Syntax für f.input und Sie sollten dann richtig sein.