mirror of
https://github.com/TracksApp/tracks.git
synced 2026-02-12 18:34:22 +01:00
make attachments accesible from user model and fix cleaning up attachment on destroy
This commit is contained in:
parent
8d9f07f57b
commit
a28edbd5d6
5 changed files with 40 additions and 7 deletions
|
|
@ -817,14 +817,12 @@ class TodosController < ApplicationController
|
|||
def attachment
|
||||
id = params[:id]
|
||||
filename = params[:filename]
|
||||
attachment = Attachment.where(id: id).first
|
||||
attachment = current_user.attachments.find(id)
|
||||
|
||||
if attachment
|
||||
if attachment.todo.user == current_user
|
||||
send_file(attachment.file.path)
|
||||
else
|
||||
head :forbidden
|
||||
end
|
||||
send_file(attachment.file.path,
|
||||
disposition: 'attachment',
|
||||
type: 'message/rfc822')
|
||||
else
|
||||
head :not_found
|
||||
end
|
||||
|
|
|
|||
|
|
@ -7,4 +7,14 @@ class Attachment < ActiveRecord::Base
|
|||
|
||||
do_not_validate_attachment_file_type :file
|
||||
# validates_attachment_content_type :file, :content_type => ["text/plain"]
|
||||
|
||||
before_destroy :delete_attached_file
|
||||
|
||||
private
|
||||
|
||||
def delete_attached_file
|
||||
file = nil
|
||||
save!
|
||||
end
|
||||
|
||||
end
|
||||
|
|
|
|||
|
|
@ -25,7 +25,7 @@ class Todo < ActiveRecord::Base
|
|||
has_many :pending_successors, -> {where('todos.state = ?', 'pending')}, :through => :predecessor_dependencies,
|
||||
:source => :successor
|
||||
|
||||
has_many :attachments, dependent: :delete_all
|
||||
has_many :attachments, dependent: :destroy
|
||||
|
||||
# scopes for states of this todo
|
||||
scope :active, -> { where state: 'active' }
|
||||
|
|
|
|||
|
|
@ -96,6 +96,7 @@ class User < ActiveRecord::Base
|
|||
|
||||
has_many :notes, -> { order "created_at DESC" }, dependent: :delete_all
|
||||
has_one :preference, dependent: :destroy
|
||||
has_many :attachments, through: :todos
|
||||
|
||||
validates_presence_of :login
|
||||
validates_presence_of :password, if: :password_required?
|
||||
|
|
|
|||
|
|
@ -542,4 +542,28 @@ class TodoTest < ActiveSupport::TestCase
|
|||
assert_equal "<p><strong>test</strong></p>", todo.rendered_notes
|
||||
end
|
||||
|
||||
def test_attachments_are_removed_after_delete
|
||||
# Given a user and a todo withou any attachments
|
||||
todo = @not_completed1
|
||||
assert_equal 0, todo.attachments.count, "we start without attachments"
|
||||
assert_equal 0, todo.user.attachments.count, "the user has no attachments"
|
||||
|
||||
# When I add a file as attachment to a todo of this user
|
||||
attachment = todo.attachments.build
|
||||
attachment.file = File.open(File.join(Rails.root, 'test', 'fixtures', 'email_with_multipart.txt'))
|
||||
attachment.save!
|
||||
new_path = attachment.file.path
|
||||
|
||||
# then the attachment should be there
|
||||
assert File.exists?(new_path), "attachment should be on file system"
|
||||
assert_equal 1, todo.attachments.reload.count, "should have one attachment"
|
||||
|
||||
# When I destroy the todo
|
||||
todo.destroy!
|
||||
|
||||
# Then the attachement and file should nogt be there anymore
|
||||
assert_equal 0, todo.user.attachments.reload.count
|
||||
assert !File.exists?(new_path), "attachment should not be on file system"
|
||||
end
|
||||
|
||||
end
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue