4

一些验证功能后,我需要挂载图片上传器。

但是,如果我像往常一样在模型中调用安装上传器:

mount_uploader :content, ContentUploader

carrierwave 首先下载内容,然后 Rails 开始验证模型。

具体来说,我根本不想加载大文件!我想检查 http 标头Content-lengthContent-type然后,如果没问题,安装上传器。

也许是这样的:

if condition
  mount_uploader :content, ContentUploader
end

我该怎么做?

PS Rails 版本 3.2.12

4

1 回答 1

1

如果您只想避免加载大文件,这不是要走的路!也就是说,可以有条件 mount overriding content=

由于 CarrierWave v1.1.0 仍然没有条件挂载。但要注意,mount_uploader首先在类中包含一个模块,然后覆盖原来content=的调用被包含模块中content= 定义的方法。因此,解决方法是在您调用mount_uploader重新定义访问器:

class YourModel < ActiveRecord::Base
    mount_uploader :content, ContentUploader

    def content=(arg)
        if condition
            super
        else
            # original behavior
            write_attribute(:content, arg)
        end
    end

    def content
        # some logic here
    end
end
于 2017-05-06T17:58:07.817 回答