我正在使用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
我是一个完整的铁杆新手,希望这对我以外的所有人来说都很明显,但我们一开始都是初学者,对吗?
谢谢!
答案 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