载波无法删除图像 [英] Carrierwave cannot remove image
本文介绍了载波无法删除图像的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我现在正在使用Carrierwave上传图像。很好,除了一个,-当我添加删除上载图像的复选框时,出现错误:无法批量分配受保护的属性:remove_image。
I'm using Carrierwave for uploading image now. All nice, except one, - when I add checkbox for removing uploaded image I get error: "Can't mass-assign protected attributes: 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-z\d\-]*$/, :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,但不要这样做。这段代码有什么问题?
I think Carrierwave must to leverage :remove_image, but don't do it. What's wrong in this code?
推荐答案
只需将 remove_image
添加到您的 attr_accessible
列表
这篇关于载波无法删除图像的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文