Следуя идее @galatians, я получил это решение (и работал красиво)
Создал репозиторий для этого примера: * https://github.com/mariohmol/paperclip-keeponvalidation
- Первое, что нужно сделатьпомещает некоторые методы в вашу базовую активную запись, чтобы каждая модель, которая использует прикрепление, могла заставить ее работать
В config / initializers / active_record.rb
module ActiveRecord
class Base
def decrypt(data)
return '' unless data.present?
cipher = build_cipher(:decrypt, 'mypassword')
cipher.update(Base64.urlsafe_decode64(data).unpack('m')[0]) + cipher.final
end
def encrypt(data)
return '' unless data.present?
cipher = build_cipher(:encrypt, 'mypassword')
Base64.urlsafe_encode64([cipher.update(data) + cipher.final].pack('m'))
end
def build_cipher(type, password)
cipher = OpenSSL::Cipher::Cipher.new('DES-EDE3-CBC').send(type)
cipher.pkcs5_keyivgen(password)
cipher
end
#ex: @avatar_cache = cache_files(avatar,@avatar_cache)
def cache_files(avatar,avatar_cache)
if avatar.queued_for_write[:original]
FileUtils.cp(avatar.queued_for_write[:original].path, avatar.path(:original))
avatar_cache = encrypt(avatar.path(:original))
elsif avatar_cache.present?
File.open(decrypt(avatar_cache)) {|f| assign_attributes(avatar: f)}
end
return avatar_cache
end
end
end
После этого включите в вашу модель и прилагаемое поле приведенный выше код
В качестве примера, я включил его в /models/users.rb
has_attached_file :avatar, PaperclipUtils.config
attr_accessor :avatar_cache
def cache_images
@avatar_cache=cache_files(avatar,@avatar_cache)
end
В вашем контроллере добавьте это, чтобы получить из кэша изображение (непосредственно перед точкой сохранения модели)
@user.avatar_cache = params [: user] [: avatar_cache]
@user.cache_images
@user.save
И, наконец, включите это в свой вид, чтобы записать местоположение текущего временного изображения
f.hidden_field: avatar_cache
Если вы хотите отобразить фактический файл, включите его:
<% if @user.avatar.exists? %>
<label class="field">Actual Image </label>
<div class="field file-field">
<%= image_tag @user.avatar.url %>
</div>
<% end %>