1

Я пытаюсь создать форму, которая имеет 3 модели (1 для реальной формы, 1 для других записей и другая для загруженных архивов). Я хочу использовать jQuery File Upload gem для загрузки моих PDF-файлов на сервер, но я также использую GentAdmin, который обрабатывает эти формы.Множественная загрузка файлов Интеграция ActiveAdmin

Как создать файл с несколькими загрузками и добавить его через мою модель файлов внутри ActiveAdmin?

я должен иметь:

  • Подтверждает, если файл является PDF
  • Подтверждает его размер
  • Submit все вместе с формой (если форма имеет ошибку, не загружать, но сохранить файлы, находящиеся на входе)

ответ

2

Для формы с несколькими загрузки вы можете попробовать это:

# active admin 
form do |f| 
    f.inputs "ModelName" do 
    f.input :name 
    end 
    f.has_many :attachments do |ff| 
    ff.input :path 
    end 
end 

# your_model.rb 
attr_accessible :attachments_attributes 
has_many :attachments 

# your_model.rb (add after relations) 
accepts_nested_attributes_for :attachments, :allow_destroy => true 

Смотри также: accept nested attributes for has_many relationship

Использование рельсов валидаторов будет препятствовать форме от спасаемых, если не прошло.

# attachment.rb 
validates :check_size 
validates :check_if_pdf 

def check_size 
    errors.add :path, "Size is NOT ok" if self.size < XXX 
end 

def check_if_pdf 
    errors.add :path, "File is NOT pdf" unless self.path.to_s.split('.').last == 'pdf' 
end 

Не уверен, что Скрепка ... Carrierwave является удивительным, так и, если вы открыты для этого драгоценного камня вы можете попробовать это:

# attachment.rb 
mount_uploader :path, MyUploader 

# app/uploaders/my_uploader.rb 
class MyUploader < CarrierWave::Uploader::Base 
    storage :file # For local storage 
    #storage :fog # If using S3 

    def store_dir 
    "uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}" 
    end 

    def filename 
    @name ||= "#{File.basename(original_filename, '.*')}" if original_filename.present? 
    end 
end 

Carrierwave имеет метод extension_white_list, что вы можете попытаться проверить что его документ в формате PDF

# uploaders/my_uploader.rb 
def extension_white_list 
    %w(pdf jpg jpeg gif png csv) 
end 
+0

Это было очень полезно после этого, как я могу загрузить несколько файлов с помощью Paperclip и activeAdmin gem? –

+0

Хорошо, добавили несколько строк, если вы хотите перейти на Carrierwave. – James

+0

Еще раз спасибо, могу ли я добавить вас в Skype? Я действительно новичок в мире Rails. –

Смежные вопросы