Ruby on Rails中的文件出现意外行为

时间:2012-08-27 15:56:58

标签: ruby ruby-on-rails-3.2

在尝试使用Ruby on Rails上传文件时,我遇到了一个问题。

以下是我上传文件的方式:

def upload_image(image)
  File.new(Rails.root.join('assets','images','products',image.original_filename),'wb') do |f|
    f.write(image.read)
  end
end

引发异常:

Errno::ENOENT in ProductsController#update

No such file or directory - /home/alex/RubymineProjects/psg/assets/images/products/my-image.png

为什么会这样?我只是创建一个新文件,我不打算打开现有文件。

1 个答案:

答案 0 :(得分:0)

它不会创建目录。

File.new("test", 'wb') #=> creates the file test
File.new("test/test", 'wb') #=> test.rb:1:in `initialize': No such file or directory - test/test (Errno::ENOENT)

如果您添加/ app,则可以获得所需的路径。尽管如此,不要认为这是使用资产管道的方式。请参阅this question中的推理。

File.open(Rails.root.join('app','assets','images','test.jpg'),'wb') do |f|
  f.write("image")
end
 => 5

cat app/assets/images/test.jpg #=> image%