2011-12-11 2 views

ответ

3

Предполагая, что вы храните на локальном диске, и что ваш конфиг выглядит следующим образом

class User < ActiveRecord::Base 
    mount_uploader :avatar, AvatarUploader 
end 

затем в действии вашего контроллера:

@user = User.find params[:id] 
File.open(@user.avatar.current_path, 'r+') do |f| 
    f.print params[:user][:avatar_textarea] 
    f.truncate f.pos 
end 
+0

Я еще не пробовал этот вариант. Но я вернусь к вам. Я собираюсь опубликовать другое решение, которое я понял. – groffcole

+0

Этот метод работает хорошо. Одна из проблем: если я загружаю файл, затем включаю сервер разработки и возвращаюсь позже, ранее загруженные файлы не обновляются. Почему это может быть? – groffcole

+0

Обнаружена проблема. Ajax-вызов был кешированием файлов. Все было хорошо сохранено, но браузер загружал более старые версии с кешем. Я начал кэшировать следующим образом: '$ (document) .ready (function() { $ .ajaxSetup ({cache: false}); });' – groffcole

1

Я понял это, создав рубиновый файл с тем же filename как обновляемый файл. Затем я заполнил этот файл содержимым textarea. Затем я вызвал update_attributes в обновляемом файле, указав атрибут: file на только что созданный файл. После обновления атрибута я удаляю созданный файл.

Я пробовал это с помощью Tempfile, но не смог найти способ сохранить желаемое имя файла.

+0

Я замечаю, что это не всегда работает. Пока я запускаю это приложение только в режиме разработки. Похоже, что когда я закрываю сервер и перезагружаю его, ранее загруженные файлы (во время предыдущих запусков сервера rails) не обновляются должным образом. Интересно, почему это так. – groffcole

+0

Обнаружена проблема. Ajax-вызов был кешированием файлов. Все было хорошо сохранено, но браузер загружал более старые версии с кешем. Я начал кэшировать следующим образом: '$ (document) .ready (function() { $ .ajaxSetup ({cache: false}); });' – groffcole

Смежные вопросы