Corey Murphy
2010-May-07 20:56 UTC
Can''t change "filename" attr "after" Create (attachment_fu)
I know how to change a filename during the upload process using attachment_fu, however I need to change it after the create based on additional information I don''t have during the initial upload. Performing an attribute update on the resulting model object always seems to ignore the "filename" attribute, but will happily update an other attribute of the record. What gives? Is it because the record''s filename is tied to a physical file? Code: params[:media_file] is the ":uploaded_data" submitted by a form to the controller. @media_file = MediaFile.new(params[:media_file]) if @media_file.save @media_file.update_attributes({:desc => "blah", :filename => "new_fname.ext"}) end logger shows the "desc" attribute being updated but never the filename attribute. What gives and how can I make this happen? -- Posted via http://www.ruby-forum.com/. -- You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en.
Vladimir Rybas
2010-May-08 03:11 UTC
Re: Can''t change "filename" attr "after" Create (attachment_fu)
Use Paperclip. It much more faster and powerful gem for attachments. And take a look at Paperclip Processors Paperclip could use custom processors to do non-standard stuff with attachments. By default it''s just resizing images with given parameters. You specify your processor name like: has_attached_file :file, :styles => {:original => {:processors => [:file_renamer]}} and you need to have a class in lib/paperclip_processors/file_renamer.rb like module Paperclip class FileRenamer < Paperclip::Processor ... end end there''s some examples in documentation. The thing is you get an uploaded @file in your processor, and in the end you need to return your renamed @new_file back. You could do anything with it inside and then use another processor in chain. Like in your case, you can create some tmp_dir, copy the @file.path to your tmp_dir/new_file_name.ext, and return @new_file File.open(tmp_dir/new_file_name.ext). Then you just delete tmp_dir with after_create filter or with cron job. On Sat, May 8, 2010 at 3:56 AM, Corey Murphy <lists-fsXkhYbjdPsEEoCn2XhGlw@public.gmane.org> wrote:> I know how to change a filename during the upload process using > attachment_fu, however I need to change it after the create based on > additional information I don''t have during the initial upload. > > Performing an attribute update on the resulting model object always > seems to ignore the "filename" attribute, but will happily update an > other attribute of the record. What gives? Is it because the record''s > filename is tied to a physical file? > > Code: > > params[:media_file] is the ":uploaded_data" submitted by a form to the > controller. > @media_file = MediaFile.new(params[:media_file]) > if @media_file.save > @media_file.update_attributes({:desc => "blah", :filename => > "new_fname.ext"}) > end > > logger shows the "desc" attribute being updated but never the filename > attribute. > > What gives and how can I make this happen? > -- > Posted via http://www.ruby-forum.com/. > > -- > You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. > To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org > To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe@googlegroups.com. > For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en. > >-- You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe@googlegroups.com. For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en.