2011-01-10 7 views
14

Próbuję użyć atrybutu wielokrotnego HTML5 w polu pliku w postaci zagnieżdżonej.W jaki sposób pole przesyłania wielu plików HTML5 jest mapowane do modelu zagnieżdżonego w Rails 3?

modele są następujące:

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 

Widok:

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

Kiedy używać w polu Plik:

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

uzyskać:

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

Co nie nie wydaje się słuszne, ponieważ myślę chcę ustawić nazwę pliku bezpośrednio na obiekt, ale nie jestem tego pewien. Kiedy próbuję załadować z tej dziedziny, przychodzące params wyglądać następująco:

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

Jednak pojawia się następujący błąd:

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

OK, błąd ten jest prawdopodobnie ze względu na fakt, że to właśnie odebrał nazwę pliku, a nie obiekt obrazu. Więc zamiast tego używam na polu Plik:

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

dla których Formtastic generuje:

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

przychodzące params wyglądać następująco:

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

Ale wtedy ten błąd:

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

Więc jak toe Czy chodzi o konfigurację mapowania plików wejściowych dla wielu plików w Railsach?

Dzięki.

+1

downvoted bo nigdy nie dostarczyły żadnych informacji zwrotnych odpowiedzi poniżej i nigdy nie wrócił, aby zaktualizować swoje pytanie, gdybyś miał/nie rozwiązane. –

Odpowiedz

2

Trzeba to :html => { :multipart => true } w form_for (lub w przypadku semantic_form_for) rozmowy tak, że znacznik <form> jest ustawiony do obsługi wysyłania plików.

Następnie powrócić do oryginalnej składni dla f.input i powinieneś być wtedy.

Powiązane problemy