2016-08-09 1 views
1

Я использую драгоценный камень Carrierwave для загрузки вложений в мою модель. Я добавил elasticsearch с плагином вложений в mapper для полнотекстового поиска вложений.Кодировка привязки Carrierwave к base64 в Rails

Carrierwave и elasticsearch работают нормально, но для того, чтобы получить полный текстовый поиск, мне нужно закодировать вложение как base64.

Я следовал этому руководству (http://rny.io/rails/elasticsearch/2013/08/05/full-text-search-for-attachments-with-rails-and-elasticsearch.html), но я предполагаю, что произошли некоторые изменения в Rails или Carrierwave, поскольку я не могу заставить его работать. В частности, когда я пытаюсь кодировать вложение как base64, я получаю следующее сообщение об ошибке Тип:

no implicit conversion of CarrierWave::SanitizedFile into String

Ошибка в следующей строке модели:

File.open(Base64.encode64(File.read(document.file))) 

Если я заменяю путь с url к фактическому файлу он работает отлично.

Я искал SO и релевантен только ответ, который я могу найти дает мне ту же ошибку: Carrierwave encode file to base64 as process

Я полный рельсы новичок и, надеюсь, это то, что очевидно для всех, кроме меня, но мы все начинающих в первую очередь, правильно?

Спасибо!

ответ

0

Метод CarrierWave's read возвращает содержимое файла. Так предполагая Document ваша модель и file ваш атрибут загрузчика, это должно работать:

Base64.encode64(document.file.read) 
+0

не может поверить, что это было так просто ... спасибо! – Nick

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

  • Нет связанных вопросов^_^