2011-01-10 36 views
14

Tôi đang cố gắng sử dụng thuộc tính nhiều HTML5 trên một trường tệp trong một biểu mẫu lồng nhau.Trường tải lên nhiều tệp HTML5 ánh xạ tới một mô hình lồng nhau trong Rails 3 như thế nào?

Các mô hình như sau:

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 

Quan điể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 %> 

Khi tôi sử dụng cho lĩnh vực file:

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

tôi nhận được:

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

Điều không có vẻ không đúng kể từ Tôi nghĩ rằng Tôi muốn đặt tên tệp trực tiếp trên đối tượng, nhưng tôi không chắc chắn về điều này. Khi tôi cố gắng để tải lên với lĩnh vực này, các params đến trông giống như:

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

Tuy nhiên, tôi nhận được lỗi sau:

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

OK, lỗi đó có lẽ là do thực tế rằng nó chỉ đã nhận được một tên tập tin và không phải là một đối tượng hình ảnh. Vì vậy, thay vào đó, tôi sử dụng cho lĩnh vực file:

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

mà Formtastic tạo:

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

Các params đến trông giống như:

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

Nhưng sau đó tôi nhận được lỗi này:

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

Vậy hãy làm thế nào một trong những đi về thiết lập này nhiều tập tin đầu vào nộp bản đồ trong Rails?

Cảm ơn.

+1

Bị bỏ phiếu vì bạn chưa bao giờ cung cấp bất kỳ phản hồi nào cho câu trả lời bên dưới và không bao giờ quay lại để cập nhật câu hỏi của bạn nếu bạn đã/chưa giải quyết. –

Trả lời

2

Bạn cần phải bao gồm :html => { :multipart => true } trong số form_for (hoặc trong trường hợp của bạn semantic_form_for) gọi để thẻ <form> được đặt để hỗ trợ tải tệp lên.

Sau đó, hoàn nguyên về cú pháp ban đầu của bạn cho f.input và bạn nên làm đúng lúc đó.

Các vấn đề liên quan