diff --git a/app/controllers/documents_controller.rb b/app/controllers/documents_controller.rb index 2f9adb977..d246add70 100644 --- a/app/controllers/documents_controller.rb +++ b/app/controllers/documents_controller.rb @@ -14,7 +14,7 @@ class DocumentsController < ApplicationController end def create - recover_attachment_from_cache + recover_attachments_from_cache if @document.save flash[:notice] = t "documents.actions.create.notice" redirect_to params[:from] @@ -60,6 +60,7 @@ class DocumentsController < ApplicationController @document = Document.new(document_params.merge(user: current_user)) @document.documentable = @documentable if @document.valid? + @document.attachment_file_name = "#{Time.now.to_i} - #{@document.attachment_file_name}" @document.attachment.save @document.cached_attachment = @document.attachment.path else @@ -88,7 +89,7 @@ class DocumentsController < ApplicationController @document.user = current_user end - def recover_attachment_from_cache + def recover_attachments_from_cache if @document.attachment.blank? && @document.cached_attachment.present? @document.attachment = File.open(@document.cached_attachment) end diff --git a/app/models/document.rb b/app/models/document.rb index 784064a7f..8b6330f93 100644 --- a/app/models/document.rb +++ b/app/models/document.rb @@ -20,28 +20,36 @@ class Document < ActiveRecord::Base validates :documentable_id, presence: true, if: -> { persisted? } validates :documentable_type, presence: true, if: -> { persisted? } - def validate_attachment_size - if documentable.present? && - attachment_file_size > documentable.class.max_file_size - errors[:attachment] = I18n.t("documents.errors.messages.in_between", - min: "0 Bytes", - max: "#{max_file_size(documentable)} MB") - end - end + after_save :remove_cached_document, if: -> { valid? && persisted? && cached_attachment.present? } - def validate_attachment_content_type - if documentable.present? && - !accepted_content_types(documentable).include?(attachment_content_type) - errors[:attachment] = I18n.t("documents.errors.messages.wrong_content_type", - content_type: attachment_content_type, - accepted_content_types: humanized_accepted_content_types(documentable)) - end - end + private - def attachment_presence - if attachment.blank? && cached_attachment.blank? - errors[:attachment] = I18n.t("errors.messages.blank") + def validate_attachment_size + if documentable.present? && + attachment_file_size > documentable.class.max_file_size + errors[:attachment] = I18n.t("documents.errors.messages.in_between", + min: "0 Bytes", + max: "#{max_file_size(documentable)} MB") + end + end + + def validate_attachment_content_type + if documentable.present? && + !accepted_content_types(documentable).include?(attachment_content_type) + errors[:attachment] = I18n.t("documents.errors.messages.wrong_content_type", + content_type: attachment_content_type, + accepted_content_types: humanized_accepted_content_types(documentable)) + end + end + + def attachment_presence + if attachment.blank? && cached_attachment.blank? + errors[:attachment] = I18n.t("errors.messages.blank") + end + end + + def remove_cached_document + File.delete(cached_attachment) if File.exists?(cached_attachment) end - end end