Скрепка - Проверьте тип файла, но не наличие - PullRequest
6 голосов
/ 11 мая 2010

Я использую скрепку для загрузки файлов, и в одной ситуации я не хочу, чтобы файл был обязательным. Однако я хочу убедиться, что это определенный тип файла, когда он присутствует.

У меня есть это:

class TestModel < ActiveRecord::Base
    #stuff
    has_attached_file :sound #etc...
    validates_attachment_content_type :sound, :content_type => ['audio/mp3', 'application/x-mp3']
end

И когда у меня нет звукового файла, он говорит, что это не один из допустимых типов контента. Я попытался добавить '' в массив :content_type, что тоже не работает!

Я также попытался создать лямбда-процедуру для свойства :if, но не могу запустить ее без какой-либо ошибки.

Здесь что-то не хватает?

Ответы [ 4 ]

4 голосов
/ 02 июня 2010

Полагаю, вы могли бы попробовать «условную валидацию», где условие, если файл присутствует?

class TestModel < ActiveRecord::Base
  #stuff
  has_attached_file :sound #etc...
  validates_attachment_content_type :sound, :content_type => ['audio/mp3', 'application/x-mp3'], :if => :sound_attached?

  def sound_attached?
    self.sound.file?
  end
end
1 голос
/ 21 марта 2012

Эта проблема была исправлена ​​в более новых версиях скрепки (я думаю, что около 2.3.4 основано на том, когда было сделано принятие) Смотрите обсуждение на

https://github.com/thoughtbot/paperclip/issues/125

0 голосов
/ 21 июня 2017

Сначала позвольте мне сказать, что я новичок в рубине и рельсах. Во-вторых, я не знаю, может ли это быть применено к аудиофайлам, но с изображениями я просто настроил изображение по умолчанию, чтобы так или иначе было фото, связанное с каждой записью.

has_attached_file :photo, styles: { small: "64x64", med: "100x100", large: "200x200" }, default_url: "/images/no-image-available.png"
0 голосов
/ 11 мая 2010

кусок моей модели:

  has_attached_file :logo, :styles => { :medium => ["300x300>", :png], :thumb => ["100x100>", :png] }
  validates_attachment_size :logo, :less_than => 2.megabytes
  validates_attachment_content_type :logo, :content_type => ['image/jpeg', 'image/png', 'image/gif']

и если я не предоставляю файл изображения, @ obj.update_attributes (..) не вызывает ошибок, но проверяет, если я предоставляю файл. Может быть, вы используете старую версию скрепки?

gem list | ack paperclip
paperclip (2.3.1.1)
...