Class: RelatedImage
- Inherits:
-
ApplicationRecord
- Object
- ActiveRecord::Base
- ApplicationRecord
- RelatedImage
- Defined in:
- app/models/related_image.rb
Overview
== Schema Information
Table name: related_images
Database name: primary
id :bigint not null, primary key
metadata :jsonb
relationship_type :string default("variant"), not null
created_at :datetime not null
updated_at :datetime not null
image_id :bigint not null
related_image_id :bigint not null
Indexes
idx_related_images_by_type (image_id,relationship_type)
idx_related_images_reverse (related_image_id,relationship_type)
idx_related_images_unique_relationship (image_id,related_image_id,relationship_type) UNIQUE
Foreign Keys
fk_rails_... (image_id => digital_assets.id)
fk_rails_... (related_image_id => digital_assets.id)
Constant Summary collapse
- UPSCALED =
Relationship types
'upscaled'- DUPLICATE =
Duplicate.
'duplicate'- VARIANT =
Variant.
'variant'- RESIZED =
Resized.
'resized'- RELATIONSHIP_TYPES =
Recognised relationship types.
[UPSCALED, DUPLICATE, VARIANT, RESIZED].freeze
Constants included from Models::Schedulable
Models::Schedulable::SIMPLE_FORM_OPTIONS
Instance Attribute Summary collapse
-
#related_image_id ⇒ Integer
Foreign key to the related image.
-
#relationship_type ⇒ String
Kind of link (
upscaled,duplicate,variant, orresized).
Belongs to collapse
Class Method Summary collapse
-
.create_bidirectional(image1, image2, relationship_type:, metadata: {}) ⇒ Array<RelatedImage>
Create a bidirectional relationship between two images For some relationship types (like duplicates), we want both directions.
-
.duplicates ⇒ ActiveRecord::Relation<RelatedImage>
A relation of RelatedImages that are duplicates.
-
.link_upscaled(original:, upscaled:, engine:, model: nil) ⇒ RelatedImage
Link an upscaled image to its original.
-
.resized ⇒ ActiveRecord::Relation<RelatedImage>
A relation of RelatedImages that are resized.
-
.upscaled ⇒ ActiveRecord::Relation<RelatedImage>
A relation of RelatedImages that are upscaled.
-
.variants ⇒ ActiveRecord::Relation<RelatedImage>
A relation of RelatedImages that are variants.
Methods inherited from ApplicationRecord
ransackable_associations, ransackable_attributes, ransackable_scopes, ransortable_attributes, #to_relation
Methods included from Models::Schedulable
Methods included from Models::AfterCommittable
Methods included from Models::EventPublishable
Instance Attribute Details
#related_image_id ⇒ Integer
Returns Foreign key to the related image.
50 51 |
# File 'app/models/related_image.rb', line 50 validates :related_image_id, uniqueness: { scope: %i[image_id relationship_type], message: 'already has this relationship with the image' } |
#relationship_type ⇒ String
Returns Kind of link (upscaled, duplicate, variant, or resized).
47 |
# File 'app/models/related_image.rb', line 47 validates :relationship_type, presence: true, inclusion: { in: RELATIONSHIP_TYPES } |
Class Method Details
.create_bidirectional(image1, image2, relationship_type:, metadata: {}) ⇒ Array<RelatedImage>
Create a bidirectional relationship between two images
For some relationship types (like duplicates), we want both directions
70 71 72 73 74 75 76 77 |
# File 'app/models/related_image.rb', line 70 def self.create_bidirectional(image1, image2, relationship_type:, metadata: {}) transaction do [ create!(image: image1, related_image: image2, relationship_type: relationship_type, metadata: ), create!(image: image2, related_image: image1, relationship_type: relationship_type, metadata: ) ] end end |
.duplicates ⇒ ActiveRecord::Relation<RelatedImage>
A relation of RelatedImages that are duplicates. Active Record Scope
57 |
# File 'app/models/related_image.rb', line 57 scope :duplicates, -> { where(relationship_type: DUPLICATE) } |
.link_upscaled(original:, upscaled:, engine:, model: nil) ⇒ RelatedImage
Link an upscaled image to its original
87 88 89 90 91 92 93 94 95 96 97 98 99 100 |
# File 'app/models/related_image.rb', line 87 def self.link_upscaled(original:, upscaled:, engine:, model: nil) create!( image: original, related_image: upscaled, relationship_type: UPSCALED, metadata: { engine: engine, model: model, original_dimensions: "#{original.}x#{original.}", upscaled_dimensions: "#{upscaled.}x#{upscaled.}", created_at: Time.current.iso8601 } ) end |
.resized ⇒ ActiveRecord::Relation<RelatedImage>
A relation of RelatedImages that are resized. Active Record Scope
59 |
# File 'app/models/related_image.rb', line 59 scope :resized, -> { where(relationship_type: RESIZED) } |
.upscaled ⇒ ActiveRecord::Relation<RelatedImage>
A relation of RelatedImages that are upscaled. Active Record Scope
56 |
# File 'app/models/related_image.rb', line 56 scope :upscaled, -> { where(relationship_type: UPSCALED) } |
.variants ⇒ ActiveRecord::Relation<RelatedImage>
A relation of RelatedImages that are variants. Active Record Scope
58 |
# File 'app/models/related_image.rb', line 58 scope :variants, -> { where(relationship_type: VARIANT) } |