Rails - Скрепка для бумаг - Как проверить размеры изображения перед сохранением - PullRequest
14 голосов
/ 28 марта 2011

У меня есть приложение Rails 3 со скрепкой. Я хочу, чтобы с помощью скрепки не сохранялись изображения шириной / высотой LTE 50x50.

Возможно ли это?

1 Ответ

36 голосов
/ 28 марта 2011

Да!Вот пользовательская проверка, которую я написал для своего приложения, оно должно работать дословно в вашем, просто установите пиксели на то, что вы хотите.

def file_dimensions
  dimensions = Paperclip::Geometry.from_file(file.queued_for_write[:original].path)
  self.width = dimensions.width
  self.height = dimensions.height
  if dimensions.width < 50 && dimensions.height < 50
    errors.add(:file,'Width or height must be at least 50px')
  end
end

Заметьте, я использовал self.width= и self.height=Чтобы сохранить размеры в базе данных, вы можете не указывать их, если не хотите сохранять размеры изображения.

Проверка ширины и высоты означает, что только один из них должен быть больше 50 пикселей.Если вы хотите убедиться, что ОБА больше 50, вам, по иронии судьбы, нужно проверить ширину ИЛИ высоту.Мне кажется странным, что одна или другая означает проверку И, а обе - ИЛИ, но в этом случае это так.

Единственный другой гоча , вам нужно запустить этоLAST validation: если в модели уже есть другие ошибки, возникнет исключение.Честно говоря, это было давно, поэтому я не помню, какие были сообщения об ошибках, но в вашем макросе проверки используйте это:

validate :file_dimensions, :unless => "errors.any?"

Это должно позаботиться об этом!

...