这是我的Image模型,其中我实现了一种验证附件尺寸的方法:
但我知道我错过了什么,因为这段代码不起作用。问题是我想在我的模型中像这样调用验证器:
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
这段代码可以正常工作,但由于方法中的宽度和高度取了固定值,所以无法重复使用。我希望将其转化为自定义验证器,以便在其他模型中也可以使用。我已经阅读了相关指南,知道在 app/models/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
但我知道我错过了什么,因为这段代码不起作用。问题是我想在我的模型中像这样调用验证器:
validates :attachment, dimensions: { width: 300, height: 200}
。你有什么关于如何实现此验证器的想法吗?
options[:width]
和options[:height]
。 - Tim Baas