2013-05-04 31 views
8

Khi bạn đã tải lên tệp, bạn có thể mở tệp đó trước khi mô hình được lưu không?Mở tệp tạm thời trước khi tệp được lưu trong mô hình Rails

Tôi đang sử dụng Kẹp giấy để lưu tệp trong thư mục/công khai.

class Book < ActiveRecord::Base 
    before_save :open_it 
    has_attached_file :upload 

    def open_it 
    a_file = open(upload.url) # this doesn't work before save ? 
    # ... 
    end 
end 
+2

Nhà cung cấp có thể, tin rằng kẹp giấy cũng có thể .. – MikDiet

+0

@MikDiet Tôi thực sự đã sử dụng CarrierWave, đang có trải nghiệm tốt hơn với nó :) –

Trả lời

13

tìm thấy nó:

def model_method 
    f = open(self.upload.queued_for_write[:original].url) 
end 

Cập nhật:

Dựa trên phản hồi từ ecoologic, sử dụng .path thay vì .url để biết thêm các phiên bản gần đây của đá quý Kẹp giấy

+1

Chó nóng! Đã cứu tôi một thời gian. Tôi đã sử dụng gọi lại after_post_process trong mô hình của tôi và tôi đã nhận được NO FILE FOUND khi cố gắng đọc tệp trong hàm gọi lại. –

+0

Bạn đã làm gì để giải quyết vấn đề này? – drmwndr

5

Đóng đủ, nhưng .url không hoạt động đối với tôi, path đã hoạt động.

file = open(uploaded.queued_for_write[:original].path) 

thực hiện thủ thuật.