2012-05-22 4 views
2

Хорошо, так я получил работу канцелярской скрепки, и я пытаюсь использовать встроенные в валидатор, чтобы убедиться, что файл загруженОчистка сообщения об ошибках PAPERCLIP

  1. Является ли изображение
  2. Не слишком большой

Так что у меня это в модели, согласно документации:

validates_attachment :avatar, 
:content_type => { :content_type => /image/ }, 
:size => { :in => 0..2.megabytes } 

Однако ошибка это показывает в вид этот беспорядок:

Error Message

Я хотел бы, чтобы это было что-то немного проще, как «Аватар файл должен быть меньше, чем 2 мегабайта»

Однако, я не вижу где это сделать, по состоянию на :message => 'something', высылает сообщение об ошибке Unknown validator: 'MessageValidator'

Как это сделать?

Обратите внимание, что счастливый путь загрузки небольшого изображения работает просто отлично.

Некоторые дополнительные испытания показывают, что загрузка слишком большого изображения (например, фона рабочего стола) или чего-то, что не является файлом .rb, выполняется более изящно, но не отображает сообщение об ошибке вообще. Все еще не совсем то, что я хочу.

ответ

3

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

def avatar_is_a_image 
    if self.avatar? 
     if !self.avatar.content_type.match(/image/) 
     errors.add(:avatar, "Avatar must be an image") 
     end 
    end 
    end 

    def avatar_is_less_than_two_megabytes 
    if self.avatar? 
     if self.avatar.size > 5.megabytes 
     errors.add(:avatar, "Avatar must be less than 5 megabytes in size") 
     end 
    end 
    end 
8

Очевидно, что вы решили эту проблему для себя уже давно, но для тех, кто ищет ответ, есть на самом деле способ сделать это в рамках предоставленной проверки.

Просто добавить свое сообщение так:

validates_attachment :avatar, 
:content_type => { :content_type => /image/, :message => "Avatar must be an image" }, 
:size => { :in => 0..2.megabytes, :message => "Avatar must be less than 2 megabytes in size" } 
Смежные вопросы