2012-08-27 25 views
1

嘗試上載Ruby on Rails中的文件時,遇到了問題。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

它不創建目錄。

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% 
+0

目錄'/ assets/images/products /'存在。 –

+0

你會推薦我關於保存圖像的路徑嗎?是的,這些不是靜態圖片,我會上傳它們。這些是網上商店「產品」的圖像。我會經常上傳它們。也就是說,有一種靜態圖像。我應該使用資產還是公用文件夾? –