将Carrierwave附件编码到Rails中的base64

时间:2016-08-09 19:52:00

标签: ruby-on-rails elasticsearch base64 carrierwave

我正在使用Carrierwave gem将附件上传到我的模型。我使用mapper附件插件添加了elasticsearch,以允许对附件进行全文搜索。

Carrierwave和elasticsearch工作正常,但为了使全文搜索工作,我需要将附件编码为base64。

我已经按照本教程(http://rny.io/rails/elasticsearch/2013/08/05/full-text-search-for-attachments-with-rails-and-elasticsearch.html)进行了操作,但我认为Rails或Carrierwave已经有了一些变化,因为我无法让它工作。具体来说,当我尝试将附件编码为base64时,我收到以下类型错误:

  

没有将CarrierWave :: SanitizedFile隐式转换为String

错误位于模型的以下行中:

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

如果我用一个url将路径替换为实际文件,它可以正常工作。

我搜索了SO,我能找到的唯一相关答案给了我同样的错误:Carrierwave encode file to base64 as process

我是一个完整的铁杆新手,希望这对我以外的所有人来说都很明显,但我们一开始都是初学者,对吗?

谢谢!

1 个答案:

答案 0 :(得分:0)

CarrierWave的var select = document.getElementById('c'), btn = document.getElementById('check'); // Add click event btn.onclick = function(){ var value = select.options[select.selectedIndex].value; // I could also use Boolean(value); to convert it to boolean and not use quote for comparsion. // Checking if condition is true. If yes, then ask for user confirmation. if(value == '1'){ console.log('condition is true; asking for confirmation'); var ask = confirm('The condition is true, do you want to continue?'); // if confirmed; if(ask){ console.log('confirmed'); // if denied/cancelled } else { console.log('cancelled'); } } }方法返回文件的内容。假设Condition: <select id="c"> <option value="1">true</option> <option value="0">false</option> </select> <button id="check">Check</button>是您的模型而read是您的上传者属性,那么这应该有效:

Document