0

既知の問題のようですが、それを機能させるための解決策やダーティな修正を見つけることができません。事は私がCarrierwaveプラグインを使用してアップロードされた添付ファイルを削除することができないということです。

アバターファイルを削除してアバター列をクリアするという特別なフォームフィールドを使用して:remove_avatarいますが、ファイルを削除するだけで、アバター列のファイル参照はまだ存在しています。

私はそれを可能な限り取り除こうとしていましたが、運がありませんでした。

update_attributes

使用u.update_attributes( :avatar => "" )は参照を削除していません

保存する()

u = User.find(int)
u.avatar = ""
u.save

参照も削除されていません

remove_avatar = true

u.remove_avatar = true
u.save

動作しない

remove_avatar!

u.remove_avatar!
u.save

動作しない

f.check_box:remove_avatar

動作しない

「機能しない」とは、ファイルがファイルシステムから削除されても、参照が保持されることを意味します。

もう一度機能させるために使用できるヒントを教えてください。それは何か汚いものかもしれません、このバグは私の締め切りの前日に示され、私は非常に必死に感じています。前もって感謝します。

Ruby:1.8.7
Rails:3.2.6
Carrierwave:gitリポジトリからのマスターブランチ

4

1 に答える 1

3

このスレッドによると、おそらく、update_columnの代わりにを使用してこれを管理できupdate_attribute、(現在のところ明確ではない理由で)実際に(単に呼び出すのではなくreload)メモリ内オブジェクトのリロードを強制します。

u = User.where('avatar is not null').last # Get a user with an avatar
u.update_column(:avatar, nil) # Use update_column to avoid callbacks
u = User.where(:id => u).first # Force a reload of the object. No, u.reload doesn't work. No, I don't know why.

コンソールでこれを行うと、u.avatar最終的に空白になります。私のバージョン情報、これがうまくいかない場合:Ruby 1.9.3、Rails 3.2.2、PostgreSQL 9.2、CarrierWave 0.5.7

于 2012-11-04T22:18:17.377 に答える