Closed6

AtiveStorage の variant と representation はどう違うのか?

ピン留めされたアイテム
ichirocichiroc

結論

  • variant
    • 画像を変形させる
  • repsesentation
    • プレビュー可能なファイル(PDFや動画等)のプレビュー画像を生成して変形させる
    • プレビューできない、プレビューを作る必要がない(元々画像)場合は内部で variant を呼び出す
ichirocichiroc

ActiveStorage.previewers の中身

irb(main):001:0> ActiveStorage.previewers
=> [ActiveStorage::Previewer::PopplerPDFPreviewer, ActiveStorage::Previewer::MuPDFPreviewer, ActiveStorage::Previewer::VideoPreviewer]
  • PopplerPDFPreviewer
  • MuPDFPreviewer
  • VideoPreviewer

デフォルトではPDFとVideoに対応してそう

ichirocichiroc

画像は previewable? は false を返す

irb(main):003:0> Item.last.main_image.previewable?
=> false
ichirocichiroc

最初に戻って ActiveStorage::Blob::Representable#representation の定義

  def representation(transformations)
    case
    when previewable?  # プレビューできそうなら
      preview transformations # プレビューする(画像を生成する)
    when variable? # プレビューできない、あるいは必要がない(元々画像)場合
      variant transformations # variant で画像を変形する
    else
      raise ActiveStorage::UnrepresentableError
    end
  end
このスクラップは2024/06/10にクローズされました