1

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

なぜこうなった?新しいファイルを作成しているだけで、既存のファイルを開こうとしているわけではありません。

4

1 に答える 1

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 を追加すると、探しているパスが得られます。ただし、それがアセット パイプラインの使用方法だとは思わないでください。この質問の理由を参照してください。

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% 
于 2012-08-27T16:00:59.733 に答える