46 lines
1.6 KiB
Ruby
46 lines
1.6 KiB
Ruby
# Model store Images for products, categories etc
|
|
class Image < ApplicationRecord
|
|
belongs_to :imageable, polymorphic: true
|
|
has_attached_file :image,
|
|
path: ':rails_root/public/images/:id/:style/'\
|
|
':id_:slugged:dotextension',
|
|
url: '/images/:id/:style/:id_:slugged:dotextension',
|
|
styles: {
|
|
home: '129x129',
|
|
small: '45x45',
|
|
medium: '80x80',
|
|
large: '260x338',
|
|
thickbox: '600x600'
|
|
}
|
|
# before_post_process :rename_file
|
|
validates_attachment_content_type :image, content_type: /\Aimage/
|
|
validates_attachment_file_name :image, matches: [/png\z/, /jpe?g\z/, /PNG\z/, /JPE?G\z/]
|
|
do_not_validate_attachment_file_type :image
|
|
scope :by_image_type, ->(type) { where(imageable_type: type) }
|
|
scope :by_position_desc, -> { order(position: :desc) }
|
|
scope :by_position_asc, -> { order(position: :asc) }
|
|
|
|
Paperclip.interpolates :slugged do |attachment, _style|
|
|
if attachment.instance.imageable.has_attribute?(:slug)
|
|
attachment.instance.imageable.slug
|
|
else
|
|
't'
|
|
end
|
|
end
|
|
|
|
def change_filename(old_name, new_name)
|
|
(image.styles.keys + [:original]).each do |style|
|
|
f1 = img_file_name(old_name)
|
|
f2 = img_file_name(new_name)
|
|
path = image.path(style).sub(f2, f1)
|
|
FileUtils.move(path, File.join(File.dirname(path), f2))
|
|
end
|
|
end
|
|
|
|
private
|
|
|
|
def img_file_name(oname)
|
|
"#{id}_#{oname}.#{image_file_name.split('.')[-1]}"
|
|
end
|
|
end
|