ruby-on-rails - Rails carrierwave 安装条件

标签 ruby-on-rails ruby carrierwave

我需要在一些验证功能后挂载图片 uploader 。

但是如果我像往常一样在模型中调用安装 uploader :

mount_uploader :content, ContentUploader

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

具体来说,我根本不想加载大文件!我想检查 http header Content-lengthContent-type 然后,如果没问题,挂载 uploader。

也许是这样的:

if condition
  mount_uploader :content, ContentUploader
end

我该怎么做?

附言Rails 版本 3.2.12

最佳答案

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

CarrierWave v1.1.0 仍然没有条件挂载。但注意 mount_uploader 首先 includes a module在类里面然后 overrides原来content=调用方法content= defined在包含的模块中。因此,解决方法是在调用 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

关于ruby-on-rails - Rails carrierwave 安装条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14895743/

相关文章:

mysql - 如何从特定数据库中检索带有行数的表名?

ruby-on-rails - Rvm ruby​​ 权限被拒绝

ruby-on-rails-3 - Carrierwave/Minimagick - 裁剪总是不准确,除非 'y' 参数为 0

ruby-on-rails - 在创建用户帐户时自定义设计用户 JSON 响应

javascript - Ruby on Rails 4.0 + javascript 未加载

ruby-on-rails - 无法激活 rack (~> 1.4.0, runtime) 已经激活 rack-1.5.0

ruby-on-rails - rails admin + carrierwave 更新破坏了图像 url

iphone - 在 iPhone 上运行 python/ruby 脚本?

ruby-on-rails - Time.zone.now 锁定在生产中

ruby-on-rails - 错误:推送到 Heroku 时未初始化常量 Sprockets::Helpers