7

我有一个 Rails 应用程序正在从 Rails 2.3.5 升级到 Rails 3。它使用 attachment_fu 进行文件上传。我们正在尝试在不更改数据库的情况下进行此转换,因此我想避免此时更改为回形针或载波。

有没有人在 Rails 3 和 Ruby 1.9.2 中成功使用 attachment_fu?我们正在使用最新版本的 attachment_fu,它声称对于 rails 3 和 ruby​​ 1.9.2 没问题,但在任何包含文件上传的表单上都会出现“TypeError (can't convert nil into Integer):”。

先前问题的所有答案似乎都是“只需切换到回形针或载波”,如: Rails3 的 Attachment_fu 或 PaperclipTypeError(无法将 nil 转换为整数):

谢谢!

4

3 回答 3

7

我做了以下更改并且它有效

附件_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|

初始化.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

于 2011-08-05T15:15:34.477 回答
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

干杯!

于 2011-07-07T10:09:20.690 回答
3

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

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

于 2013-03-13T16:57:21.360 回答