7

Tôi có một ứng dụng đường ray đang được nâng cấp từ Rails 2.3.5 lên Rails 3. Nó sử dụng attachment_fu để tải tệp lên. Chúng tôi đang cố gắng thực hiện chuyển đổi này mà không thực hiện thay đổi DB, vì vậy tôi muốn tránh thay đổi sang kẹp giấy hoặc tàu sân bay tại thời điểm này.Có ai có thể lấy file đính kèm để làm việc với ray 3 không?

Có ai đã thành công trong việc sử dụng attachment_fu với Rails 3 và Ruby 1.9.2 không? Chúng tôi đang sử dụng phiên bản mới nhất của attachment_fu mà tuyên bố là ok cho ray 3 và ruby ​​1.9.2, nhưng nhận được 'TypeError (không thể chuyển đổi nil thành Integer):' trên bất kỳ biểu mẫu nào bao gồm tệp tải lên.

Tất cả các câu trả lời cho câu hỏi trước đó dường như là 'chỉ cần chuyển sang kẹp giấy hoặc carrierwave' như trong: Attachment_fu or Paperclip for Rails3 hoặc TypeError (can't convert nil into Integer):

Cảm ơn!

+0

Bạn có thể gửi stack trace đầy đủ? Có thể tốt nhất là Gist hoặc Pastie. –

+0

Đây là dấu vết ngăn xếp dưới dạng gist: https://gist.github.com/1038499 Dường như dấu vết trong bài đăng khác về TypeError. –

+0

Bạn có thể tìm ra điều này không? – deb

Trả lời

7

tôi đã thực hiện những thay đổi sau đây và nó làm việc

attachment_fu.rb

def temp_path 
    p = temp_paths.first 
    if p.is_a?(ActionDispatch::Http::UploadedFile) # Rails 3.0.3 compatability fix 
    p.tempfile.path 
    else 
    p.respond_to?(:path) ? p.path : p.to_s 
    end 
end 

Tôi cũng thay đổi returning filename.strip do |name| để filename.strip.tap do |name|

init.rb

def make_tmpname(basename, n) 
    ext = nil 
    n ||= 0 
    sprintf("%s%d-%d%s", basename.to_s.gsub(/\.\w+$/) { |s| ext = s; '' }, $$, n, ext) 
end 

tôi đã thực hiện một ngã ba trên github với điều này thay đổi https://github.com/debprado/attachment_fu

+2

+1, làm việc cho tôi .. cảm ơn rất nhiều .. –

+0

Cảm ơn !! Tôi sẽ có thể sử dụng nó khi các ưu tiên của tôi cho phép tôi quay trở lại cổng ray3. –

6

attachment_fu vá Tempfile.make_tmpname trong attachment_fu/init.rb và không hoạt động trong 1.9.2: sprintf ("% d", nil) không thành công và trong 1.8.7 kết quả của biểu thức này là "0".

Việc sửa chữa là để chèn một dòng trong init.rb từ:

sprintf('%s%d-%d%s', File::basename(basename, ext), $$, n, ext) 

để

n ||= 0 
sprintf('%s%d-%d%s', File::basename(basename, ext), $$, n, ext) 

Bạn có thể tìm thấy một số cuộc thảo luận ở đây https://github.com/technoweenie/attachment_fu/issues/25

Cheers!

+0

Cảm ơn! Tôi sẽ thử! –

+0

Tôi có cùng một vấn đề, tôi đã thử điều này và vẫn không làm việc – deb

+0

Tôi đã không có cơ hội để thử nó kể từ khi nhận được phản ứng do các ưu tiên khác. Chúng tôi cũng đang xem xét chuyển sang carrierwave, nhưng sử dụng quy ước đặt tên attachment_fu như được mô tả ở đây: http://ruby.simapse.com/2011/03/migrate-attachmentfu-to-carrierwave.html –

3

Hãy thử phiên bản gemified tôi có hỗ trợ Rails 3.2:

https://rubygems.org/gems/pothoven-attachment_fu

+0

Trong dự án của tôi, chúng tôi đã chuyển sang carrierwave và sử dụng quy ước đặt tên attachment_fu như được mô tả ở trên. Tuy nhiên, tôi chắc chắn rằng tìm ra có một phiên bản gemified sẽ rất hữu ích cho bất cứ ai vẫn còn sử dụng attachment_fu. Có lý do chính đáng để chúng tôi chuyển sang carrierwave cuối cùng, nhưng nó không đau. Cảm ơn cho con trỏ - nếu bạn kết thúc bằng cách sử dụng đá quý này trở lại và +1 câu trả lời! –

+0

Tôi đã sử dụng nó và nó hoạt động hoàn hảo cho hầu hết các trường hợp. Mặc dù bây giờ tôi nghĩ rằng tôi có thể đã chia nó và đang sử dụng của riêng tôi bị hack một. – thekingoftruth

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