Closed6
AtiveStorage の variant と representation はどう違うのか?
ピン留めされたアイテム

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

ActiveStorage::Blob::Representable#representation
の定義
def representation(transformations)
case
when previewable?
preview transformations
when variable?
variant transformations
else
raise ActiveStorage::UnrepresentableError
end
end

ActiveStorage::Blob::Representable#previewable?
の定義
def previewable?
ActiveStorage.previewers.any? { |klass| klass.accept?(self) }
end

ActiveStorage.previewers
の中身
irb(main):001:0> ActiveStorage.previewers
=> [ActiveStorage::Previewer::PopplerPDFPreviewer, ActiveStorage::Previewer::MuPDFPreviewer, ActiveStorage::Previewer::VideoPreviewer]
- PopplerPDFPreviewer
- MuPDFPreviewer
- VideoPreviewer
デフォルトではPDFとVideoに対応してそう

画像は previewable?
は false を返す
irb(main):003:0> Item.last.main_image.previewable?
=> false

最初に戻って 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にクローズされました