3

最初はシンプルに見えたものを実現しようと少し苦労しています。carrierwaveを使用するrails3.0アプリのコンテキストで。ユーザーは、.exeファイルを除くすべての種類のドキュメントをダウンロードできる必要があります。Carriewaveにはホワイトリストがあります

def extension_white_list
    %w(jpg jpeg gif png)
end

ブラックリストがあったらいいのにと思いますが、私の場合はもっと簡単になります。とにかく、これは主な関心事ではありません。

画像ファイルの場合、アップローダークラスに2つのバージョンを設定しました。

 version :thumb do
      process :resize_to_fit => [50, 50]  
  end


  version :small do
     process :resize_to_fit => [125, 125]
  end

私はこの構文に少し混乱していることを認めなければなりません。どのようなルビーコード「バージョン」が定義するか。つまり、それはメソッドではないので、クラスでは何ですか?

メソッドイメージを作成しようとしましたか?

def image?
%w(jpg jpeg gif png).include?(filename.extension.to_s)
end

次に、バージョンコードから呼び出して、ファイルがイメージでない場合にそれらのバージョンが作成されないようにします。

version :thumb do
  if image?
    process :resize_to_fit => [50, 50]  
  end
end

しかし、このコードはエラーをスローします

undefined method `image?' for #<Class:0x000001017274f8> 

どんな助けでもいただければ幸いです。

ありがとう。

4

2 に答える 2

14

これを実際に行う方法は次のとおりです。現在のバージョンのcarrierwaveは、条件付きバージョン処理をサポートするようになりました。wikiページhttps://github.com/jnicklas/carrierwave/wiki/How-to%3A-Do-conditional-processingを参照してください

特定のタイプのバージョンのみを作成するには、次のようにします。

version :thumb, :if => :image? do
  process :resize_to_fit => [50, 50]  
end

protected

def image?(new_file)
  new_file.content_type.include? 'image'
end
于 2011-09-23T17:14:27.603 に答える
0

最後に、この質問に対する明確でクリーンな回答: https://gist.github.com/995663

于 2011-07-31T04:55:33.797 に答える