Domanda

Per la cronaca, sto lavorando su un codice legacy e sto cercando di collegare una nuova funzionalità senza interrompere tutto. In questo momento ho un sacco di file sul mio server in quanto tale:

 myapp/public/temp/myfile.doc

Il fatto è che voglio creare un oggetto Docfile da questi file in un'azione del controller.

Ecco la classe Docfile ridotta:

class DocFile < ActiveRecord::Base
  has_attached_file :docs,
    :path => "#{Constants::DOCFILES_PATH}:basename.:extension",
    :url => "http://#{Constants::SITE_URL}/docs/:basename.:extension"
end

Paperclip ha una buona documentazione se carichi da un modulo, ma non nella mia situazione.

Quindi, come posso " simulare " il fatto che sto caricando un file?

Finora ho provato questo:

temp_file_url = "correct_rails_root/myapp/public/temp/myfile.doc"
@docfile = DocFile.new :docs => temp_file

Ma non funziona.

Qualunque puntatore sarebbe apprezzato!

Modifica:

Ho fatto questo:

temp_file_url = Constants::TEMPORARY_UPLOAD_PATH + "/" + params[:temp_file_upload][:doc]
temp_file = File.new(temp_file_url,  "w+")
@docfile = DocFile.new :docs => File.open(temp_file_url)

Non funziona ancora

È stato utile?

Soluzione

Ho dovuto fare questo:

temp_file_name = #the filename
temp_file_path = Constants::TEMPORARY_UPLOAD_PATH + "/" + temp_file_name
temp_file = File.new(temp_file_path,  "r")

@docfile = DocFile.new :docs => temp_file

Apparentemente se non avessi aperto il file come " leggi " non funzionerebbe. Per me ha poco senso, ma ora funziona!

Altri suggerimenti

Non sono un'autorità su Rails ma,

@docfile = DocFile.new :docs => temp_file

non dovrebbe essere

@docfile = DocFile.new :docs => temp_file_url  

Dovresti passare Paperclip a un oggetto File :

temp_file_path = 'correct_rails_root/myapp/public/temp/myfile.doc'
@docfile = DocFile.new :docs => File.open(temp_file_path)

Penso che dovrai affrontarlo con una migrazione e per i tuoi file esistenti dovrai popolare le colonne che la graffetta aggiunge al tuo modello ( xxx_file_name , xxx_content_type, xxx_file_size ). Non hai menzionato se Constants :: DOCFILES_PATH è mappato sulla tua directory di documenti legacy, ma anche così penso che dovrai collegare in modo simbolico a questi file la struttura di directory che paperclip si aspetta.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top