私はペーパークリップで厄介な問題に直面しています。関連するモデルのdestroyメソッドを呼び出すとき。データベースレコードは削除されますが、添付ファイルは削除されません。 私はレールサーバのログを見ましたが、ファイル "添付ファイルの削除"のみが表示され、ファイルを削除するためのログは表示されません。ペーパークリップの添付ファイルが削除されていません
私はファイル名の補間を使用して、アップロードされたファイルの名前を変更しています(コードを参照)。 この補間を削除すると(削除:パス&:モデルからのURL)、destroyメソッドが正しく動作していることがわかりました。だから私は根本的な原因を確信しています:ファイル名補間。 間違った方法で補間を使用していますか?それはペーパークリップの既知の問題ですか?
:path => ":rails_root/public/system/:attachment/:id/:style/:normalized_photo_file_name.:extension",
:url =>
"/system/:attachment/:id/:style/:normalized_photo_file_name.:extension"
Paperclip.interpolates :normalized_photo_file_name do |attachment, style|
attachment.instance.normalized_photo_file_name
end
def normalized_photo_file_name
if @rnd.nil?
@rnd= SecureRandom.hex(4)
end
"photo_#{@rnd}"
end
Ohh!そうかもしれない。しかし、私はまだ破壊が呼び出されたときに '@ rnd'変数がなぜnilであるのか不思議です。私はレールで新しいです、私は何かを逃したのですか? '@ rnd'の目的は、次の補間呼び出しのために常に同じランダム値を持つことでした。 – enenkey
インスタンス変数です。インスタンスがなくなれば消えてしまいます。データベースからオブジェクトを取得するときには、常にオブジェクトを再度読み込み(新しいインスタンスを作成する)ことになります。 –
ご説明いただきありがとうございます – enenkey