Я использую скрепку в приложении рельсов и имею следующие три валидаций в моей моделиРазумной Скрепка валидация
validates_attachment_presence :photo
validates_attachment_size :photo, :less_than=>1.megabyte
validates_attachment_content_type :photo, :content_type=>['image/jpeg', 'image/png', 'image/gif']
Если пользователь забыл добавить вложение, все три валидации неудачи и, таким образом, пользователь представлены следующие три ошибок:
# Photo file name must be set.
# Photo file size file size must be between 0 and 1048576 bytes.
# Photo content type is not included in the list
Я думаю, что было бы лучше, чтобы просто показать первую ошибку в данном случае, так как две других ошибки являются чисто логически вытекающими ... Я предпочел бы пользователь только когда-либо видеть вторых двух ошибок, если вложение было добавлено, но не соответствует критериям проверки.
Я уверен, что нет предварительной проверки, которая делает такие вещи и от чтения кода в vendor/plugins/paperclip/lib/paperclip.rb. Я вижу, что метод validates_attachment_size поддерживает: if параметр as показано:
def validates_attachment_presence name, options = {}
message = options[:message] || "must be set."
validates_presence_of :"#{name}_file_name",
:message => message,
:if => options[:if],
:unless => options[:unless]
end
Итак, я думал, что я мог бы сделать что-то вроде следующего:
validates_attachment_size :photo, :less_than=>1.megabyte, :unless=> :photo.blank
Но это ломает приложение. У кого-нибудь есть опыт такого рода вещей? Будет хорошим вкладом в исходный код скрепки.
EDIT:
Я попытался с помощью этого:
validates_attachment_size :photo, :less_than=>1.megabyte,
:unless=> Proc.new { |image| image[:photo].nil? }
Это не совсем работа, хотя, как я только что удалось загрузить 5mb mp3 с этой проверки на месте. Но это многообещающе, поскольку сообщение об ошибке не появляется, когда пользователь не добавил фотографию.
Какую версию скрепки вы используете? У меня есть 2.3.1.1, и то, что вы описываете, происходит автоматически для меня. Если файл не прикреплен, он возвращает только эту ошибку. Если я присоединяю файл, но проверки размера и типа содержимого терпят неудачу, он показывает эти ошибки. –
странно, потому что я тоже 2.3.1.1 плагина ... я собираюсь пойти с предложением ниже о создании моих собственных сообщений об ошибках в любом случае, потому что мне действительно не нравится, как они сообщают вам о необходимых потребностях чтобы быть между 0 и X байтами .... – stephenmurdoch
Я использую 2.3.2 с той же проблемой –