123456789_123456789_123456789_123456789_123456789_

Module: ActiveStorage::Attached::Model

Relationships & Source Files
Super Chains via Extension / Inclusion / Inheritance
Class Chain:
Defined in: activestorage/lib/active_storage/attached/model.rb

Overview

Provides the class-level DSL for declaring an Active Record model’s attachments.

Class Method Summary

::ActiveSupport::Concern - Extended

class_methods

Define class methods from given block.

included

Evaluate given block in context of base class, so that you can write class macros here.

prepended

Evaluate given block in context of base class, so that you can write class macros here.

append_features, prepend_features

Instance Attribute Summary

Instance Method Summary

Class Method Details

.validate_global_service_configuration(model_class) (private)

[ GitHub ]

  
# File 'activestorage/lib/active_storage/attached/model.rb', line 274

def validate_global_service_configuration(model_class)
  if model_class.connected? && ActiveStorage::Blob.table_exists? && Rails.configuration.active_storage.service.nil?
    raise RuntimeError, "Missing Active Storage service name. Specify Active Storage service name for config.active_storage.service in config/environments/#{Rails.env}.rb"
  end
end

.validate_service_configuration(service_name, model_class, association_name)

This method is for internal use only.
[ GitHub ]

  
# File 'activestorage/lib/active_storage/attached/model.rb', line 263

def validate_service_configuration(service_name, model_class, association_name) # :nodoc:
  if service_name
    ActiveStorage::Blob.services.fetch(service_name) do
      raise ArgumentError, "Cannot configure service #{service_name.inspect} for #{model_class}##{association_name}"
    end
  else
    validate_global_service_configuration(model_class)
  end
end

Instance Attribute Details

#changed_for_autosave?Boolean (readonly)

This method is for internal use only.
[ GitHub ]

  
# File 'activestorage/lib/active_storage/attached/model.rb', line 285

def changed_for_autosave? # :nodoc:
  super || attachment_changes.any?
end

Instance Method Details

#*_attachment

Returns the attachment for the has_one_attached.

User.last.avatar_attachment
[ GitHub ]

  
# File 'activestorage/lib/active_storage/attached/model.rb', line 13

rdoc_method :method: *_attachment

#*_attachments

Returns the attachments for the has_many_attached.

Gallery.last.photos_attachments
[ GitHub ]

  
# File 'activestorage/lib/active_storage/attached/model.rb', line 20

rdoc_method :method: *_attachments

#*_blob

Returns the blob for the has_one_attached attachment.

User.last.avatar_blob
[ GitHub ]

  
# File 'activestorage/lib/active_storage/attached/model.rb', line 27

rdoc_method :method: *_blob

#*_blobs

Returns the blobs for the has_many_attached attachments.

Gallery.last.photos_blobs
[ GitHub ]

  
# File 'activestorage/lib/active_storage/attached/model.rb', line 34

rdoc_method :method: *_blobs

#attachment_changes

This method is for internal use only.
[ GitHub ]

  
# File 'activestorage/lib/active_storage/attached/model.rb', line 281

def attachment_changes # :nodoc:
  @attachment_changes ||= {}
end

#initialize_dup

This method is for internal use only.
[ GitHub ]

  
# File 'activestorage/lib/active_storage/attached/model.rb', line 289

def initialize_dup(*) # :nodoc:
  super
  @active_storage_attached = nil
  @attachment_changes = nil
end

#reload

This method is for internal use only.
[ GitHub ]

  
# File 'activestorage/lib/active_storage/attached/model.rb', line 295

def reload(*) # :nodoc:
  super.tap { @attachment_changes = nil }
end

#with_attached_*

Includes the attached blobs in your query to avoid N+1 queries.

If ActiveStorage.track_variants is enabled, it will also include the variants record and their attached blobs.

User.with_attached_avatar

Use the plural form for has_many_attached:

Gallery.with_attached_photos
[ GitHub ]

  
# File 'activestorage/lib/active_storage/attached/model.rb', line 55

rdoc_method :method: with_attached_*