Spec-Zone.ru › Ruby on Rails 8.1

класс ActiveStorage::Attachment

Вложение Active Storage

Вложения связывают записи с blob-объектами. Обычно это связь «одна запись — много blob-объектов», но один и тот же blob-объект можно связать с несколькими разными записями. Ограничение внешнего ключа в таблице вложений не позволяет удалять blob-объекты, пока они связаны с какими-либо записями.

Вложения также предоставляют доступ ко всем методам из ActiveStorage::Blob.

Чтобы предварительно загрузить вложения или blob-объекты, можно использовать следующие области видимости:

# preloads attachments, their corresponding blobs, and variant records (if using `ActiveStorage.track_variants`)
User.all.with_attached_avatars

# preloads blobs and variant records (if using `ActiveStorage.track_variants`)
User.first.avatars.with_all_variant_records

Публичные методы класса

with_all_variant_records () Показать исходный код
# File activestorage/app/models/active_storage/attachment.rb, line 45
scope :with_all_variant_records, -> { includes(blob: {
  variant_records: { image_attachment: :blob },
  preview_image_attachment: { blob: { variant_records: { image_attachment: :blob } } }

За один раз предварительно загружает все записи вариантов для вложения.

User.first.avatars.with_all_variant_records

Публичные методы экземпляра

blob () Показать исходный код
# File activestorage/app/models/active_storage/attachment.rb, line 31
belongs_to :blob, class_name: "ActiveStorage::Blob", autosave: true, inverse_of: :attachments

Возвращает связанный ActiveStorage::Blob.

preview (transformations) Показать исходный код
# File activestorage/app/models/active_storage/attachment.rb, line 101
def preview(transformations)
  transformations = transformations_by_name(transformations)
  blob.preview(transformations)
end

Возвращает экземпляр ActiveStorage::Preview для вложения с набором предоставленных transformations. Пример:

video.preview(resize_to_limit: [100, 100]).processed.url

или, если используются предопределённые варианты:

video.preview(:thumb).processed.url

Дополнительные сведения см. в ActiveStorage::Blob::Representable#preview.

Вызывает исключение ArgumentError, если transformations — это Symbol, представляющий неизвестный предопределённый вариант вложения.

purge () Показать исходный код
# File activestorage/app/models/active_storage/attachment.rb, line 51
def purge
  transaction do
    delete
    record.touch if record&.persisted?
  end
  blob&.purge
end

Синхронно удаляет вложение и удаляет blob-объект.

purge_later () Показать исходный код
# File activestorage/app/models/active_storage/attachment.rb, line 60
def purge_later
  transaction do
    delete
    record.touch if record&.persisted?
  end
  blob&.purge_later
end

Удаляет вложение и ставит фоновую задачу в очередь для удаления blob-объекта.

record () Показать исходный код
# File activestorage/app/models/active_storage/attachment.rb, line 25
belongs_to :record, polymorphic: true, touch: ActiveStorage.touch_attachment_records

Возвращает связанную запись.

representation (transformations) Показать исходный код
# File activestorage/app/models/active_storage/attachment.rb, line 120
def representation(transformations)
  transformations = transformations_by_name(transformations)
  blob.representation(transformations)
end

Возвращает экземпляр ActiveStorage::Preview или ActiveStorage::Variant для вложения с предоставленным набором transformations. Пример:

avatar.representation(resize_to_limit: [100, 100]).processed.url

или, если используются предопределённые варианты:

avatar.representation(:thumb).processed.url

Дополнительные сведения см. в ActiveStorage::Blob::Representable#representation.

Вызывает исключение ArgumentError, если transformations — это Symbol, представляющий неизвестный предопределённый вариант вложения.

variant (transformations) Показать исходный код
# File activestorage/app/models/active_storage/attachment.rb, line 82
def variant(transformations)
  transformations = transformations_by_name(transformations)
  blob.variant(transformations)
end

Возвращает экземпляр ActiveStorage::Variant или ActiveStorage::VariantWithRecord для вложения с предоставленным набором transformations. Пример:

avatar.variant(resize_to_limit: [100, 100]).processed.url

или, если используются предопределённые варианты:

avatar.variant(:thumb).processed.url

Дополнительные сведения см. в ActiveStorage::Blob::Representable#variant.

Вызывает исключение ArgumentError, если transformations — это Symbol, представляющий неизвестный предопределённый вариант вложения.

© 2004–2021 David Heinemeier Hansson
Licensed under the MIT License.

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API