有没有人能够使用attachment_fu与rails 3一起工作?

时间:2011-06-20 19:39:13

标签: ruby-on-rails ruby ruby-on-rails-3 attachment-fu rails-3-upgrade

我有一个从Rails 2.3.5升级到Rails 3的rails应用程序。它使用attachment_fu进行文件上传。我们试图在不进行数据库更改的情况下进行此转换,因此我希望此时不要更改为paperclip或carrierwave。

有没有人成功地将attachment_fu用于Rails 3和Ruby 1.9.2?我们正在使用最新版本的attachment_fu,声称对rails 3和ruby 1.9.2没问题,但是在任何包含文件上传的表单上都会出现'TypeError(无法将nil转换为整数):' p>

之前问题的所有答案似乎都是“只是切换到回形针或载波”,如下所示: Attachment_fu or Paperclip for Rails3 要么 TypeError (can't convert nil into Integer):

谢谢!

3 个答案:

答案 0 :(得分:7)

我做了以下更改并且有效

<强> 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

答案 1 :(得分:6)

attachment_fu在 attachment_fu / init.rb 中修补Tempfile.make_tmpname,它在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

干杯!

答案 2 :(得分:3)

试试我的支持Rails 3.2的gemified版本:

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