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 299

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 288

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

#attachment_changes (rw)

This method is for internal use only.
[ GitHub ]

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

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

#attachment_changes=(value) (rw)

This method is for internal use only.
[ GitHub ]

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

attr_writer :attachment_changes # :nodoc:

#changed_for_autosave?Boolean (readonly)

This method is for internal use only.
[ GitHub ]

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

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

#becomes(klass)

This method is for internal use only.
[ GitHub ]

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

def becomes(klass) # :nodoc:
  super.tap do |became|
    attachment_changes = @attachment_changes&.each_value do |change|
      change.record = became
    end
    became.attachment_changes = attachment_changes
  end
end

#initialize_dup

This method is for internal use only.
[ GitHub ]

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

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 322

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_*