這是我的圖片模型,其中我已經實現了一個方法,用於驗證附件的尺寸:回形針圖片尺寸自定義的驗證
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
這工作得很好,但由於該方法採用固定值,它是不可重複使用寬度&高度。我想將其轉換爲自定義驗證器,因此我也可以在其他模型中使用它。我讀過有關這個導遊,我知道這會是這樣的應用程序/模型/ 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]' –