Как сделать «очень» пользовательскую проверку с использованием Ruby и «скрепки»? - PullRequest
0 голосов
/ 19 января 2011

В моем приложении RoR3 мне требуется пользовательских проверок для драгоценного камня 'paperclip'. Я должен вызывать их в точное время во время выполнения кода и только для проверки части полей формы (не всех полей в форме) .

Итак, я сделал что-то, как описано ниже.Однако это не работает, возможно потому, что я не (и не знаю, как) «заполнить» загружаемый файл (параметры «paperclip»), чтобы выполнить на нем свою пользовательскую проверку.

Что я сделалесть:

В виде:

<%= form_for(@account, :html => { :multipart => true }) do |f| %>
  ...
    <%= f.label :avatar %>
  ...
<% end %>

В контроллере:

...

update
  ...
  @account.validates_account_avatar(params[:account])
  ...
end

...

В модели:

  has_attached_file :avatar,
    :styles => {
      :thumb=> "100x100#",
      :small  => "150x150>" }

  def validates_account_avatar(account)
    allowed_mime_types = %w{"image/bmp", "image/gif", "image/jpeg", "image/png"} 
    max_size = 2048 

    self.errors.add( :avatar, "must be a file" ) if account[:avatar].blank?
    self.errors.add( :avatar, "isn't a valid image format") if allowed_mime_types.one? {|allowed_content_type| allowed_content_type.match(account[:avatar].content_type.to_s)}
    self.errors.add( :avatar, "is to big") if account[:avatar].size > max_size

    self.validate

    return true if self.errors.empty?
    return false
  end

Параметры отладки Iполучите это:

... account"=>{"avatar"=>#<File:/tmp/RackMultipart20110119-94706-mxpg37>}, "commit"=>" ...

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

1 Ответ

2 голосов
/ 19 января 2011

Вы можете выполнить каждую из этих проверок с уже существующими валидаторами скрепок

validates_attachment_size

validates_attachment_content_type

validates_attachment_presence

это уже существующие проверки с помощью Paperclip, читайте: https://github.com/thoughtbot/paperclip.

...