2011-01-10 9 views
14

Bir dosya alanında HTML5 çoklu özniteliğini iç içe formda kullanmaya çalışıyorum. aşağıdaki gibi HTML5 çoklu dosya yükleme alanı, Rails 3'teki yuvalanmış bir modelle nasıl eşleşir?

modelleri

şunlardır:

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 

görünüm:

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

ben dosya alanı için kullanın:

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

alıyorum:

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

'dan beri doğru görünmüyor. Sanırım dosyada doğrudan dosya adını ayarlamak istiyorum ancak emin değilim. Aşağıdaki hatayı alıyorum, ancak

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

: Bu alanla yüklemeye çalışırken, gelen parametreler benziyor

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

Tamam, bu hata nedeni muhtemelen öyle mi sadece bir resim nesnesi değil, bir dosya adı aldı. Bunun yerine, ben dosya alanı için kullanın:

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

hangi Formtastic'in oluşturur:

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

:

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

Ama sonra bu hatayı alıyorum:

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

Peki nasıl? Rails'deki bu çoklu dosya girişini haritalamaktan mı kurtuldunuz?

Teşekkürler.

+1

Aşağıdaki cevaba hiçbir zaman geri bildirim sağlamadığınız ve sorunun çözülmediği/çözülmediyse sorunuzu güncellemeye hiçbir zaman geri dönmediğiniz için kısaltıldı. –

cevap

2

Sen <form> Etiket dosya yüklemeleri destekler olarak ayarlanır, böylece form_for (veya sizin durumunuzda semantic_form_for olarak) çağrısına :html => { :multipart => true } dahil etmek gerekir.

f.input için orijinal sözdizime geri dönün ve sonra doğru olmalısınız.