0

私のアプリには、アップロードされたファイルが消えた、carrierwave アップローダーのエントリが多数あります。これをrakeタスクで修正したいのですが、これらのアップローダーをnilに設定したり削除したりすることができません。典型的なセッションは次のとおりです。

[43] pry(main)> article
=> #<Product id: 80, name: "Barcelona", ambient_picture: "ambient.jpg", special: false, slug: "barcelona", image: "image.jpg">
[44] pry(main)> article.remove_ambient_picture!
=> nil
[45] pry(main)> article
=> #<Product id: 80, name: "Barcelona", special: false, slug: "barcelona", image: "image.jpg">
[46] pry(main)> article.save
   (0.2ms)  BEGIN
   (0.1ms)  COMMIT
=> true

などなど、うんざりです—何も役に立たないようです。参照する削除メソッドは、他のコールバックへのハブのように見えるため、ファイルが実際に存在する場合にのみ機能する可能性があります。

では、この状況で私は何をすべきですか?

4

1 に答える 1

1

だから今のところ私はこれに頼った:

    unless article.ambient_picture?
      p "Removing #{article.ambient_picture}"
      sql = ActiveRecord::Base.connection()
      sql.update "UPDATE articles SET ambient_picture=null WHERE id=#{article.id}"
    end

私はこれが理想的ではないことを知っているので、好奇心から、これをより適切な方法で処理する方法についての提案を歓迎します。

于 2012-11-17T15:21:19.127 に答える