To jest mój model Obraz, w którym zostały wdrożone metody sprawdzania wymiarów nasadki za:Spinacz obraz Wymiary niestandardowe walidatora
class Image < ActiveRecord::Base
attr_accessible :file
belongs_to :imageable, polymorphic: true
has_attached_file :file,
styles: { thumb: '220x175#', thumb_big: '460x311#' }
validates_attachment :file,
presence: true,
size: { in: 0..600.kilobytes },
content_type: { content_type: 'image/jpeg' }
validate :file_dimensions
private
def file_dimensions(width = 680, height = 540)
dimensions = Paperclip::Geometry.from_file(file.queued_for_write[:original].path)
unless dimensions.width == width && dimensions.height == height
errors.add :file, "Width must be #{width}px and height must be #{height}px"
end
end
end
Działa to dobrze, ale to nie jest wielokrotnego użytku, gdyż metoda ta stała wartości szerokość & wysokość. Chcę to przekształcić w Custom Validator, więc mogę go używać także w innych modelach. Czytałem prowadnice o tym, wiem, że to będzie coś takiego w app/modeli/dimensions_validator.rb:
class DimensionsValidator < ActiveModel::EachValidator
def validate_each(record, attribute, value)
dimensions = Paperclip::Geometry.from_file(record.queued_for_write[:original].path)
unless dimensions.width == 680 && dimensions.height == 540
record.errors[attribute] << "Width must be #{width}px and height must be #{height}px"
end
end
end
ale wiem, że czegoś brakuje przyczyny kod ten nie działa. Chodzi o to, że chcę nazwać walidację jak to w moim modelu:
validates :attachment, dimensions: { width: 300, height: 200}
.
Jakieś pojęcie o tym, jak ten weryfikator powinien zostać wdrożony?
Nie jestem pewien, ale myślałem, że możesz uzyskać dostęp do swojej szerokości i wysokości poprzez atrybut options .. np: 'options [: width]' i 'options [: height]' –