Paperclip,before_save和删除附件

时间:2014-05-20 03:21:08

标签: ruby-on-rails ruby-on-rails-3 paperclip before-save

我无法使此before_save过滤器正常工作。我认为我的方法很标准。图像通过Paperclip上传。

before_save :remove_checked_attachments

def attachments
  %w(banner footer logo accreditation)
end

private

def remove_checked_attachments
  attachments.each do |a|
    if "remove_#{a}".to_sym && !"#{a}_updated_at_changed?".to_sym
      "#{a}".to_sym.destroy
    end
  end
end

传递了remove_...参数,但没有删除任何内容:

... "remove_banner"=>"1" ...

有什么想法?感谢。

更新

即使简化它也不起作用:

after_validation { banner.clear if remove_banner == '1' }

"remove_banner"=>"1"在参数中出现。 u.banner.clear然后u.banner.save在控制台中正常工作。

1 个答案:

答案 0 :(得分:0)

我通过这样的关注来解决这个问题:

# must be included after attachment declarations in model
module RemoveAttachment
  extend ActiveSupport::Concern

  included do
    attachment_definitions.keys.each do |name|

      attr_accessible :"remove_#{name}"
      attr_accessor :"remove_#{name}"

      before_validation { send(name).destroy if send("remove_#{name}") == '1' }

      define_method :"remove_#{name}=" do |value|
        instance_variable_set :"@remove_#{name}", value
        send("#{name}_file_name_will_change!")
      end

    end
  end
end

只需在任何需要的地方包括关注点。感谢this回答了一个巨大的线索。