Кто-нибудь смог заставить attachment_fu работать с rails 3? - PullRequest
7 голосов
/ 20 июня 2011

У меня есть приложение rails, которое обновляется с Rails 2.3.5 до Rails 3. Оно использует attachment_fu для загрузки файлов. Мы пытаемся выполнить это преобразование без внесения изменений в БД, поэтому я бы хотел сейчас не переходить на скрепку или несущую.

Кому-нибудь удалось использовать attachment_fu с Rails 3 и Ruby 1.9.2? Мы используем самую последнюю версию attachment_fu, которая утверждает, что она подходит для rails 3 и ruby ​​1.9.2, но получает «TypeError (не может преобразовать nil в Integer):» в любых формах, которые включают загрузку файла.

Все ответы на предыдущие вопросы кажутся «просто переключитесь на скрепку или несущую», как в: Attachment_fu или Скрепка для Rails3 или же TypeError (невозможно преобразовать ноль в целое число):

Спасибо!

Ответы [ 3 ]

7 голосов
/ 05 августа 2011

Я сделал следующие изменения, и это сработало

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

Я также изменил 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

я сделал форк на github с этими изменениями https://github.com/debprado/attachment_fu

6 голосов
/ 07 июля 2011

attachment_fu исправляет Tempfile.make_tmpname в attachment_fu / init.rb , и это не работает в 1.9.2: сбой sprintf ("% d", nil), а в 1.8.7 результат это выражение "0".

Исправление заключается в вставке строки в init.rb из:

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

до

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

Некоторые обсуждения можно найти здесь https://github.com/technoweenie/attachment_fu/issues/25

Ура!

3 голосов
/ 13 марта 2013

Попробуйте мою версию с самоопределением, которая поддерживает Rails 3.2:

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

...