How to delete a uploaded file with file_column plugin?


#1

Hi,

sounds somehow stupid, but I can’t get rid of my files that I uploaded
into my application via the file_column plugin. Any suggestions?

Cheers

Thomas


#2

Just destroy the record (which has a file-column) and the file gets
removed.


#3

I’m pretty sure if you set the column that you have defined as your
image to “”, the file will be removed.

jt


#4

I can’t do that, because the ‘file_columned’ record is a user and I
don’t want to destroy the whole user account :wink: Actually I just want to
reset the file column. Maybe I should try it with a own model for
uploaded files - that way I could destroy the related record without any
pain

Thx

Thomas


#5

John T. wrote:

I’m pretty sure if you set the column that you have defined as your
image to “”, the file will be removed.

I tried both “@user.image = ‘’” and “@user.image = nil”. The first one
just does nothing and the second one produces an error. So, no luck this
time :wink:

Cheers

Thomas


#6

Rails mailing list
removed_email_address@domain.invalid
http://lists.rubyonrails.org/mailman/listinfo/rails


#7

On 3/27/06, Noel R. Morais removed_email_address@domain.invalid wrote:

does’nt work!

Hmm… That’s all I had to do. Actually, now that I think about it, I’m
not sure if it did delete the file. I’ll have to do some testing.

jt


#8

does’nt work!


#9

Thomas N. wrote:

I can’t do that, because the ‘file_columned’ record is a user and I
don’t want to destroy the whole user account :wink: Actually I just want to
reset the file column. Maybe I should try it with a own model for
uploaded files - that way I could destroy the related record without any
pain

Thx

Thomas

Modifying the DB schema is indeed the right way to go here for sure,
regardless of how easy/hard it is to work with the image as part of the
user model.


#10

ian parkins wrote:

Modifying the DB schema is indeed the right way to go here for sure,
regardless of how easy/hard it is to work with the image as part of the
user model.

Yeah, I split off things and now have an user and an image table/model.
And it works like a charm :slight_smile: Moreover I declared “user has_many:
images” which is much cooler than before.

Thx

Thomas


#11

I ran into this same issue, and noticed the following:
(assume model User and file_column :file)

after @user.file is called, a variable called @file_state is added to
the @user instance, which contains an instance of PermanentUploadedFile,
the class that file column uses for its operation. If you expose the
@file_state variable, you can then call all the methods in the
PermanentUploadedFile class, including delete_files, which removes the
directory and everything in it for the current file_column.

You can do this by adding:

def state
@file_state
end

to your model and then calling news.state.delete_files

I’ve only just tried this in the console and it worked, but there may be
some bad implications of exposing that variable or other problems. If
some others want to help dig into this, that would be cool.

jared


#12

Here’s a patch which fixes this issue in the library.

— a/vendor/plugins/file_column/lib/file_column.rb
+++ b/vendor/plugins/file_column/lib/file_column.rb
@@ -638,7 +638,11 @@ module FileColumn # :nodoc:
end

   define_method "#{attr}=" do |file|
  •    state = send(state_method).assign(file)
    
  •    if file
    
  •      state = send(state_method).assign(file)
    
  •    else
    
  •      state = send(state_method).delete
    
  •    end
       instance_variable_set state_attr, state
       if state.options[:after_upload] and state.just_uploaded?
         state.options[:after_upload].each do |sym|
    

Once you’ve done this you should be able to set model.delete_file_column
in a form to delete the file.

Jared Moody wrote:

I ran into this same issue, and noticed the following:
(assume model User and file_column :file)

after @user.file is called, a variable called @file_state is added to
the @user instance, which contains an instance of PermanentUploadedFile,
the class that file column uses for its operation. If you expose the
@file_state variable, you can then call all the methods in the
PermanentUploadedFile class, including delete_files, which removes the
directory and everything in it for the current file_column.

You can do this by adding:

def state
@file_state
end

to your model and then calling news.state.delete_files

I’ve only just tried this in the console and it worked, but there may be
some bad implications of exposing that variable or other problems. If
some others want to help dig into this, that would be cool.

jared