質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Q&A

3回答

1361閲覧

画像の書き出しができません。

SignHack

総合スコア7

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

0グッド

0クリップ

投稿2017/09/12 19:14

編集2022/01/12 10:55

###前提・実現したいこと
簡単なSNSサービスのようなものを作成しています。
アイコン画像データの保存でつまづきました。

###発生している問題・エラーメッセージ

**Errno::ENOENT in CategoriesController#update** No such file or directory @ rb_sysopen - public/category_image/7.jpg

###該当のソースコード

ruby

1def update 2 @category = Category.find_by(id: params[:id]) 3 @category.name = params[:name] 4 @category.password = params[:password] 5 if params[:image] 6 @category.image_name = "#{@category.id}.jpg" 7 image = params[:image] 8 IO.binwrite("public/category_image/#{@category.image_name}", image.read) 9 end 10 if @category.save 11 @category.save 12 flash[:notice] = "Update Successfull!" 13 redirect_to("/categories/#{@category.id}") 14 else 15 render("/categories/edit") 16 end 17 end

###試したこと
https://docs.ruby-lang.org/ja/latest/class/IO.html
を参考にIO.writeやIO.binwriteとしましたが何も変わりません。
-- File.write, File.binwriteもだめです。

###補足情報(言語/FW/ツール等のバージョンなど)
Ruby -v
ruby 2.3.1p112 (2016-04-26 revision 54768) [x86_64-linux]
rails -v
Rails 5.1.4

Vagrant
VirtualMachin
CentOS

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

同じ問題でなやんだ。

binwrite()の引数のpathはカレント基準になっているのでいきなりpublicからはじめても
そんなディレクトリねえよってなる

だから画像を保存したいディレクトリまでいって

$ pwd #画像を保存させたいとこで実行 フルパスを取得

そのフルパスをbinwrite()の引数にわたす。

これでできたで。

投稿2018/11/05 13:29

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

No such file or directory @ rb_sysopen - public/category_image/7.jpg
そんな名前(public/category_image/7.jpg)のファイルが無い、あるいは,
そんな名前(public/category_image)のディレクトリが無い。

というのがエラーの内容なのですから、ファイル名か、ディレクトリ名に問題があるという事です。

Dir.pwdメソッドでカレントディレクトリを取得し、表示させてみてください。
そして、カレントディレクトリの下に、public/category_imageというディレクトリがあることを確認してください。

投稿2017/09/13 01:13

coco_bauer

総合スコア6915

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

SignHack

2017/09/13 13:16

ご回答ありがとうございます。 エラーの内容確認しましたが、 public/category_imageというディレクトリはちゃんと存在しています。 もしかしたら私の理解が間違っているのかもしれませんが、 File.binwrite("public/category_image/#{@category.image_name}", image.read) は、public/category_imageのディレクトリにimage.readで読み込んだ画像データを@category.image_nameという名前で保存してくれという命令とういうことですよね ? もともと@category.image_nameというファイルが存在していなくてもRubyの方で@category.image_nameという名前のファイルを生成してくれるものだと理解していますが間違っているでしょうか? また、Dir.pwdメソッドを色々調べましたがいまいち使い方がわかりません、、、 せっかくご教授いただいたのに申し訳ございません、、
coco_bauer

2017/09/14 00:34

エラーメッセージから、"public/category_image/#{@category.image_name}"が"public/category_image/7.jpg"に置換されていることが判ります。 imageに関する情報は"image = params[:image]"という1行のコードだけですので、何なのか判りかねます(image.readが何を意味するのか推測すらできません)。
SignHack

2017/09/15 04:14

ご回答ありがとうございます。 置換される過程は理解できました。 image.readはimage = params[;image]で代入したデータを書き出すものです。
guest

0

コメント失礼します。
僕も全く同じ問題に悩んでいるのですが、この問題解決しましたでしょうか?
binwriteのエラーに困り、色々調べるうちにここにたどり着きました。
もし解決していれば解決法をご教授いただきたいのですが..。
回答でないご無礼お許しください。
よろしくお願いします。

投稿2018/02/24 13:03

kuwappi

総合スコア12

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問