В моем приложении 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"=>" ...
Конечно, если у вас есть лучший способ решить эту проблему, не стесняйтесь рекомендовать мне.