7

我有一个从Rails 2.3.5升级到Rails 3的Rails应用程序。它使用attachment_fu来上传文件。我们正在尝试在不进行数据库更改的情况下执行此转换,因此我现在要避免更改回形针或载波。有没有人能够得到attachment_fu与轨道3工作?

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

所有的答案前面的问题似乎是“只需切换到回形针或carrierwave”为: Attachment_fu or Paperclip for Rails3TypeError (can't convert nil into Integer):

谢谢!

+0

您可以发布完整的堆栈跟踪?可能最好作为Gist或Pastie。 –

+0

以下是作为要点的堆栈跟踪: https://gist.github.com/1038499 它看起来很像跟踪TypeError的其他帖子。 –

+0

你能弄清楚这一点吗? – deb

回答

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

+2

+1,为我工作..非常感谢.. –

+0

谢谢!当我的优先级让我回到rails3端口时,我将能够使用它。 –

6

attachment_fu补丁Tempfile.make_tmpname在attachment_fu/init.rb,和它不工作1.9.2:的sprintf( “%d”,无)失败,并且该表达的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

干杯!

+0

谢谢!我会试试看! –

+0

我有同样的问题,我试过这个,但仍然不能正常工作 – deb

+0

自从获得其他优先级响应以来,我还没有机会尝试它。我们也在考虑切换到carrierwave,但使用attachment_fu命名约定如下所述:http://ruby.simapse.com/2011/03/migrate-attachmentfu-to-carrierwave。html –

3

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

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

+0

在我的项目上,我们最终切换到carrierwave并使用上述的attachment_fu命名约定。但是,我确信发现有一个gemified版本会对仍在使用attachment_fu的任何人有帮助。我们最终有充分的理由转向载波,但这并非无痛。感谢指针 - 如果你最终使用这个宝石回来,并+1的答案! –

+0

我用这个,它对大多数情况下完美的作品。虽然现在我想我可能已经分叉它,并且正在使用我自己的黑客。 – thekingoftruth

相关问题