加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ruby-on-rails – Carrierwave无法删除图像

发布时间:2020-12-17 04:06:05 所属栏目:百科 来源:网络整理
导读:我现在正在使用Carrierwave上传图片.一切都很好,除了一个,– 当我添加复选框以删除上传的图像时,我收到错误:“无法批量分配受保护的属性:remove_image”. 形成: ...%= f.check_box :remove_image %%= f.label :remove_image,"remove image" %... 模型: c
我现在正在使用Carrierwave上传图片.一切都很好,除了一个,– 当我添加复选框以删除上传的图像时,我收到错误:“无法批量分配受保护的属性:remove_image”.

形成:

...
<%= f.check_box :remove_image %>
<%= f.label :remove_image,"remove image" %>
...

模型:

class Manufacturer < ActiveRecord::Base

  attr_accessible :name,:alias,:short_description,:long_description,:image,:publish,:position,:meta_keywords,:meta_description,:meta_title

  mount_uploader :image,ManufacturerUploader

  validates_presence_of :name,:alias
  validates_uniqueness_of :name,:alias
  validates_format_of :alias,:with => /^[a-zd-]*$/,:message => "a-z,0-9 ' - ' ONLY"

  default_scope order('position ASC')

  before_destroy :remember_image
  after_destroy :remove_img

  protected
  def remember_image
    @image_name = self[:image]
  end

  def remove_img
    File.delete("#{Rails.root}/public/images/manufacturer/#{@image_name}")
    File.delete("#{Rails.root}/public/images/manufacturer/thumb_#{@image_name}")
  end

end

提供者:

class ManufacturerUploader < CarrierWave::Uploader::Base

 include CarrierWave::MiniMagick
 include Sprockets::Helpers::RailsHelper
 include Sprockets::Helpers::IsolatedHelper

 storage :file

 before :store,:remember_cache_id
 after :store,:delete_tmp_dir

 def remember_cache_id(new_file)
   @cache_id_was = cache_id
 end

 def delete_tmp_dir(new_file)
   if @cache_id_was.present? && @cache_id_was =~ /A[d]{8}-[d]{4}-[d]+-[d]{4}z/
      FileUtils.rm_rf(File.join(root,cache_dir,@cache_id_was))
   end
 end

def store_dir
  "images/#{model.class.to_s.underscore}"
end

def default_url
  "" + [version_name,"default.jpg"].compact.join('_')
end

process :resize_to_fit => [300,300]

version :thumb do
   process :resize_to_fit => [150,150]
end

def extension_white_list
   %w(jpg jpeg gif png)
end

def filename
  "#{secure_token(10)}.#{file.extension}" if original_filename.present?
end

protected
def secure_token(length=16)
  var = :"@#{mounted_as}_secure_token"
  model.instance_variable_get(var) or model.instance_variable_set(var,SecureRandom.hex(length/2))
end

end

我认为Carrierwave必须利用:remove_image,但不要这样做.这段代码有什么问题?

解决方法

只需将remove_image添加到attr_accessible列表即可

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读