Myślę, że mam problem z kurczakiem i jajkiem. Chciałbym ustawić content_type pliku przesłanego za pomocą Paperclip. Problem polega na tym, że domyślny content_type jest oparty tylko na rozszerzeniu, ale chciałbym oprzeć go na innym module.Zastępowanie content_type dla Rails Paperclip plugin
wydaje mi się, aby móc ustawić content_type z before_post_process
class Upload < ActiveRecord::Base
has_attached_file :upload
before_post_process :foo
def foo
logger.debug "Changing content_type"
#This works
self.upload.instance_write(:content_type,"foobar")
# This fails because the file does not actually exist yet
self.upload.instance_write(:content_type,file_type(self.upload.path)
end
# Returns the filetype based on file command (assume it works)
def file_type(path)
return `file -ib '#{path}'`.split(/;/)[0]
end
end
... Ale nie mogę oprzeć typ zawartości na plik ponieważ Spinacz nie pisze plik aż after_create.
I nie wydają się ustawić content_type po to zostało zapisane lub z after_create zwrotnego (nawet z powrotem w sterowniku)
Więc chciałbym wiedzieć, czy mogę jakoś uzyskać dostęp do rzeczywistego obiektu pliku (załóżmy, że żaden procesor nie robi nic w oryginalnym pliku) przed jego zapisaniem, tak że mogę uruchomić polecenie file_type. Czy istnieje sposób modyfikowania content_type po utworzeniu obiektów.
dojazd do pliku tymczasowego było dokładnie to, czego potrzebowałem. Zmieniłem go również z 'before_post_process' na' before_save' – Fotios