0

Rails モデルにクリップ スタイルを追加しました。

class Asset < ActiveRecord::Base

   has_attached_file :media,
                :styles => {:thumb => "100x100>"}
end

アップロードされた新しいアセットには適切なサム スタイルがあり、これは正しい URL を返します。

asset = Asset.last
asset.media(:thumb) = correct_url

しかし、存在しないスタイルでさえ URL を返すようです:

asset = Asset.last
asset.media(:foobar) = some_url

「ラージ」などの新しいスタイルをモデルに追加していますが、以前に保存したモデル インスタンスにそのスタイルが存在しない場合は、エラーまたは空の文字列が返されると予想されます。

インスタンスのスタイルが存在しない場合、paperclip に空の文字列を返すにはどうすればよいでしょうか?

asset = Asset.last #doesn't have style foobar
asset.media(:foobar) = ''   #or could return an error

ありがとう。

4

3 に答える 3

0

あなたが何を望んでいるのか正確に理解しているかどうかはわかりません。

JUST WRONG スタイルの URL を要求したときにエラー/空の文字列を取得したい場合 (つまり、開発者がスペルを間違えた場合)、次のことを試すことができます。

デフォルトでは、 で指定したようにタグを置き換えるだけですhas_attached_file補間方法を参照してください。

このデフォルトの動作はオプションで変更できるようです。と同様のクラスを実装する必要がありますPaperclip::Interpolationsself.default_options ここを参照してください。:interpolatorあなたのためのものです。

一方、特定の添付ファイルの不足しているスタイルの空の URL を取得したい場合 (つまり、正しいが、何らかの理由でファイルが存在しない - 新しいスタイルを追加しただけかもしれません)、次のようにします。

これはパフォーマンスに影響を与える可能性があると思います(つまり、ファイルシステムや外部サービスでの作業など)。したがって、一般的な使用法には適していません。

新しいスタイルを追加するときは、rake タスクを実行することを検討する必要があります。rake paperclip:missing_stylesペーパークリップには、これを行うための( github 上の)既にあります。しかし、これは非常に長時間実行されるタスクになる可能性があります (たとえば、私のホスティング サーバーは完了する前に rake プロセスを強制終了します)。

また、パフォーマンスが問題にならない場合は、独自のインターポレーターを作成できます。

于 2013-03-27T15:50:19.560 に答える
0

:default_url がそのシナリオを処理するとは思わなかったので、確認する必要があります。しかし、スタイルが存在するかどうかを本当に知る必要がある場合に私があなたのケースに対して行ったことは、次のようなものです:

flavor = (Faraday.head(post.photo.url(:output)).status == 200) ? :output : :original
url = post.photo.url(flavor)

ヒットしたファイルをダウンロードするので注意してください。これは、既存のすべての添付ファイルを paperclip rake タスクで再処理したくないことも前提としています。

于 2013-08-22T11:52:36.337 に答える
0

インスタンスのスタイルが存在しない場合、paperclip に空の文字列を返すにはどうすればよいでしょうか?

その単純なケースでは、に設定:default_urlする""とうまくいくはずです:

class Asset < ActiveRecord::Base
  has_attached_file :media, :styles => {:thumb => "100x100>"}, :default_url => ""
end
于 2013-03-27T16:10:28.003 に答える