我有一个rails应用程序,它正在从rails 2.3.5升级到rails 3。它使用attachment_fu上传文件。我们试图在不更改DB的情况下进行转换,所以我想避免此时更改为回形针或carrierwave。
有人成功地将attachment_fu与Rails 3和Ruby 1.9.2结合使用了吗?我们使用的是最新版本的attachment_fu,它声称适用于rails 3和ruby 1.9.2,但在任何包含文件上传的表单上都会得到"TypeError(无法将nil转换为Integer):"。
之前问题的所有答案似乎都是"切换到回形针或carrierwave",如下所示:扶手的Attachment_fu或回形针3或TypeError(不能将nil转换为Integer):
谢谢!
我做了以下更改,它在中工作
附件_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
attachment_fu在attachment_fil/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
干杯!
试试我的支持Rails 3.2:的gemized版本
https://rubygems.org/gems/pothoven-attachment_fu