当## destroy被叫时,CarrierWave不会删除资产?

时间:2011-02-16 00:22:55

标签: ruby-on-rails activerecord carrierwave

我在Rails3应用中使用CarrierWave上传资源。上传方面都很好,但是当调用destroy方法时,不会删除相应的资产。

看起来CarrierWave为此创建了一个可以在destroy方法中使用的动态方法,因此如果模型是avatar,那么像remove_avatar这样的方法就会出现。

然而,我无法让任何这些工作。任何提示都非常赞赏。

2 个答案:

答案 0 :(得分:3)

我很抱歉回答我自己的问题,但就我而言,这是一个忽略显而易见的简单案例:CarrierWave模型需要一个字符串字段来包含路径名称。所以我的模型是:

class SiteAsset < ActiveRecord::Base
  mount_uploader :asset, AssetUploader

  def store_dir
    'public/assets'
  end

  def extension_white_list
    %w(jpg jpeg gif png pdf doc docx xls xlsx)
  end
end

正确的迁移是:

class CreateSiteAssets < ActiveRecord::Migration
  def self.up
    create_table :site_assets do |t|
      t.string :title
      t.string :asset
      t.timestamps
    end
  end

  def self.down
    drop_table :site_assets
  end
end

咒语的缺失部分是我的迁移中缺少“资产”字符串。我想我只是没有看到文件中的要求,虽然良好的意义会使它立即明显。

答案 1 :(得分:2)

前几天我遇到了同样的问题。它使用简单的形式,但似乎不喜欢嵌套表单上的* remove_model_name *。

最后我把它吸了起来并使用了一个hidden_​​field:_destroy

供参考:https://github.com/galaxylord/carrierwave_nested