Как улучшить и запустить собственный метод проверки? - PullRequest
0 голосов
/ 15 августа 2011

Я использую Ruby on Rails 3.0.9 и Paperclip 2.3.Поскольку гем Paperclip предлагает только два метода проверки (validates_attachment_presence и validates_attachment_content_type), я пытаюсь реализовать свои собственные методы проверки.

В моем файле модели у меня есть просто , следующая проверкаметод

def validates_avatar(attribute_name, file)
  if file.nil? # file value is nil if no file is uploaded
    self.errors.add( "#{attribute_name}", "You must select a file" )
  else
    self.errors.add( "#{attribute_name}", "Avatar is an invalid image format") unless MIME_TYPES.include?(file.content_type)
    self.errors.add( "#{attribute_name}", "Avatar is too big" if ( ( file.size > AVATAR_FILE_MAX_SIZE.to_i ) || ( file.size == nil ) )
  end

  return self.errors.empty?
end

, который я вызываю из своих контроллеров следующим образом:

if @user.validates_avatar(:avatar, params[:user][:avatar])
  ...
end

Я хотел бы выполнить вышеуказанную проверку для запуска \, чтобы запустить один и тот же способ для всехдругие методы проверки Ruby on Rails (например: as-like validates :title, :presence => true работает).

Как я могу это сделать и как я могу улучшить приведенный выше код для обработки проверок аватаров?

Ответы [ 2 ]

3 голосов
/ 15 августа 2011

Он уже включен в Paperclip и выполняет ту же работу. так почему ты хочешь это повторить?

class Avatar < ActiveRecord::Base
  has_attached_file :file
  validates_attachment_presence :file
  validates_attachment_size :file, :less_than => 5.megabytes
  validates_attachment_content_type :file, :content_type => ['image/jpeg', 'image/png']
end

и никогда не проверять в контроллере - это работа модели. Просто

@user = User.new(params[:user])
@user.save

Не сохранит @user, если @user.avatar не пройдет проверку

1 голос
/ 15 августа 2011

Вы должны действительно перенести валидации в модель. Вот пример:

validate :avatar_should_be_valid

def :avatar_should_be_valid
errors.add(:base, "avatar is invalid!") if...
end
...