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

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

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

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

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

アップロード

アップロードは特定のファイルをウェブサーバに送るプロセスのことを指します。

Q&A

解決済

2回答

2140閲覧

Shrineのアップロードした写真を削除した際の写真データについて

shuzi

総合スコア197

Ruby on Rails 5

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

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

アップロード

アップロードは特定のファイルをウェブサーバに送るプロセスのことを指します。

0グッド

0クリップ

投稿2019/02/13 07:59

編集2019/02/26 11:10

shrineで画像をアップしたものを削除しようとしてます。
純オプションで削除できなかったのでphoto.idで検索し、消そうとしてます。

モデルのリレーションは
item
item_photos(中間テーブル)
photos

です。

今は
item.id→
@item = Item.find(params[:id])

→中間テーブルを参照し、photoモデルを検索してます。
@photo = Photo.find(@item.photos.ids)

→格納したphotoをdestroyメソッドで消去しようとしているのですが、エラーが出ます。
かれこれ3日間取り組んでも解決しなかったので力添えお願いします。
イメージ説明

rails

1item.controller 2 3def destroy 4 @photo = Photo.find(@item.photos.ids) 5 @photo = blank 6 #@item.photos.destroy_all 7 #@item.destroy 8 flash[:success] = "商品情報を削除しました。" 9 redirect_to items_url 10 end 11 12 private 13 # Use callbacks to share common setup or constraints between actions. 14 def set_item 15 @item = Item.find(params[:id]) 16 end

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

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

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

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

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

guest

回答2

0

Railsのライブラリ関係は海外サイトの方が有効な記事が多い気がしますね。英単語を調べながらでもいいので、ある程度は読めた方が後々生きますが、どうしても英語が苦手ならソースコードだけ追っても割とわかったりします。

で、StachOverflowの海外版に興味深いフォーラムを見つけましたのでどうぞ。同じような悩みを抱えている質問者です。
Rails 5 Nested Form Image Upload, Cache and View

回答者のソースコードをみるとdestroyメソッドで消去しているようです。

なお、画像を再度呼び出すプログラムは自分も作ったことがあり、その際はblankで逐一、画像の中身を消去していましたが、それがShrineで使えるかはちょっとわからないです…

投稿2019/02/23 01:05

編集2019/02/23 01:08
FKM

総合スコア3640

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

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

shuzi

2019/02/25 07:16

回答ありがとうございます! そうですよね、オプションの機能にこだわらず、自分でコード打って消すようにしてもいいですもんね。 ちょっとパプリックフォルダの画像を消せるようにチャレンジしてみます。
guest

0

自己解決

すごく強引かもしれませんが、
def destroy
@item.photos.each do |photo|
photo.destroy
end

....省略

end

item has_many photo の関係
@photos = @item.photos に[a, b, c] といった配列になっていた。

配列に[]を入れて、saveしようとしたり、blankにしようとしたが全て失敗。

eachで取り出してdestroy。でなんとか成功。
配列全体に対してdestryをする?方法を調べる必要がある。
Shrineのキャッシュ削除についても調べる。
→ImageUploader にplugin :delete_promoted を追加することで削除成功。

投稿2019/02/26 14:47

編集2019/02/27 01:58
shuzi

総合スコア197

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問