4

いくつかの検証機能の後、画像アップローダーをマウントする必要があります。

しかし、モデルで通常のマウント アップローダーを呼び出すと、次のようになります。

mount_uploader :content, ContentUploader

Carrierwave がコンテンツをダウンロードし、Rails がモデルの検証を開始します。

具体的には、大きなファイルをまったくロードしたくありません! httpヘッダーを確認しContent-lengthContent-type、OKならアップローダーをマウントしたい。

多分そのようなもの:

if condition
  mount_uploader :content, ContentUploader
end

どうすればいいですか?

PS Rails バージョン 3.2.12

4

1 に答える 1

1

大きなファイルのロードを避けたいだけなら、これは行くべき道ではありません! そうは言っても、条件付きマウントオーバーライドを持つことができます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 に答える