Как использовать скрепку с файлом уже на моем сервере? - PullRequest
2 голосов
/ 26 ноября 2009

Кстати, я работаю над устаревшим кодом и пытаюсь подключить новую функцию, не нарушая все. Прямо сейчас у меня на сервере куча файлов как таковых:

 myapp/public/temp/myfile.doc

Дело в том, что я хочу создать объект Docfile из этих файлов в действии контроллера.

Вот урезанный класс Docfile:

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

Скрепка имеет хорошую документацию, если вы загружаете из формы, но не в моей ситуации.

Так как я могу "смоделировать" тот факт, что я загружаю файл?

Пока я пробовал это:

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

Но это не работает.

Любые указатели приветствуются!

Edit:

Я сделал это:

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)

Это все еще не работает

Ответы [ 4 ]

3 голосов
/ 27 ноября 2009

Я должен был сделать это:

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

Видимо, если бы я не открыл файл как "прочитанный", он бы не работал. Это имеет мало смысла для меня, но это работает сейчас!

1 голос
/ 26 ноября 2009

Вы должны передать Paperclip a File объект:

temp_file_path = 'correct_rails_root/myapp/public/temp/myfile.doc'
@docfile = DocFile.new :docs => File.open(temp_file_path)
1 голос
/ 26 ноября 2009

Я не специалист по Rails, но,

@docfile = DocFile.new :docs => temp_file

не должно быть

@docfile = DocFile.new :docs => temp_file_url  
0 голосов
/ 26 ноября 2009

Я думаю, что вам нужно будет решить эту проблему с помощью миграции, и для ваших существующих файлов вам нужно будет заполнить столбцы, которые скрепка добавляет в вашу модель (xxx_file_name, xxx_content_type, xxx_file_size). Вы не упомянули, сопоставлен ли Constants::DOCFILES_PATH с вашим прежним каталогом документов, но даже в этом случае, я думаю, вам придется использовать символическую ссылку на эти файлы в структуре каталогов, которую ожидает paperclip.

...