2012-10-21 36 views
8

Tôi gặp phải vấn đề tải tệp lên trong Rails. Tôi đã tìm thấy trợ giúp file_field :file, có thể được sử dụng với form_for(@some_model). Tuy nhiên, tôi không thể tìm thấy bất kỳ cách sử dụng nào cho trường hợp này, vì các thẻ này được sử dụng để tạo/chỉnh sửa một số mô hình, bằng cách gán khối lượng. Có, AFAIK, không có khả năng để xử lý tập tin tải lên như là trường điển hình (Xem File upload won't work in Ruby on Rails 3 using Multipart Form). Trong trường hợp này, thao tác thủ công trên tệp được tải lên là bắt buộc. Vì vậy, tại sao một ai đó thậm chí muốn đặt một tập tin tải lên như là một phần của chỉnh sửa mô hình?Ruby On Rails: ví dụ về file_field trên form_for

photo.rb

class Photo < ActiveRecord::Base 
     attr_accessible :name, :filename, 
    end 

photo_form.html.erb

<%= form_for(@photo, :multipart => true) do |f| %> 

    <%= f.label :name %> 
    <%= f.text_field :name %> 

    <%= f.file_field :file %> 

    <%= f.submit %> 

<% end %> 

photos_controller.rb

def create 
    @photo = Photo.new(params[:photo]) 

dòng trên thất bại, vì theres no: tập tin thuộc tính. Nó phải được xử lý trước và bị xóa theo cách thủ công từ :params. Một lần nữa - có sử dụng thực sự cho các thẻ như vậy không?

+0

Hey, nếu bạn có có bất kỳ ý tưởng nào về cách tải tệp lên bằng form_for khi có các trường và nhãn khác, vui lòng chia sẻ tệp tại đây. Thậm chí tôi đang cố gắng để làm công việc này. – learner

+0

Và nó sẽ là tốt đẹp nếu không có cần phải sử dụng bất kỳ đá quý. – learner

+0

Điều gì sẽ xảy ra nếu bạn thử 'attr_accesible: name,: file' và trong chế độ xem của bạn' <% = f.file_field: filename%> '? – mmichael

Trả lời

3

Tôi nhớ rằng tôi đã sử dụng để tải lên tập tin xml trong Rails

xem:

<%= form_tag({action: :upload}, multipart: true) do %> 
    <%= file_field_tag 'xml_file' %> 
    <%= submit_tag 'Submit' %> 
<% end %> 

điều khiển:

def upload 
    file_data = params[:xml_file] 
end 

Nó được sử dụng form_tag nhưng nó sẽ không khó để thêm thông tin khác vào biểu mẫu đó.

3

tôi sẽ sẽ cho bạn một ví dụ làm thế nào tôi đang sử dụng nó, tôi nghĩ rằng nó giải thích riêng của mình đủ tốt, tôi hy vọng điều này sẽ giúp

<%= form_for @item do |f|%> 
    <%= f.file_field :photo, accept: 'image/png,image/jpeg'%> 
<% end %> 

Hãy cho tôi biết nếu bạn có bất kỳ nghi ngờ