1

我无法让这个before_save过滤器工作。我认为我的方法很标准。图像通过回形针上传。

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.clearu.banner.save

4

1 回答 1

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

并且只要在需要的地方包括关注。感谢这个答案提供了一个巨大的线索。

于 2014-06-10T06:00:22.723 回答