我试图使用where子句从表中获取id,但值返回为ActiveRecord_Relation。
def generate_qrcode
idBuscado = get_id_beneficio(3) #the 3 it's just for testing values
qrcode = make_qrcode(idBuscado)
send_data qrcode.to_s, type: 'image/png', disposition: 'inline'
end
private def get_id_beneficio(idBuscado)
itemlist = Beneficio.select('Id_beneficio', :conditions => ['id_beneficio = ?', "%#{idBuscado}%"]).limit(1)
end
private def make_qrcode(cadena = 0)
qrcode = RQRCode::QRCode.new(cadena)
image = qrcode.as_png(
resize_gte_to: false,
resize_exactly_to: false,
fill: 'white',
color: 'red',
size: 300,
border_modules: 3,
module_px_size: 4,
file: nil # path to write
)
image.resize(150, 150)
end
的错误
我现在需要如何获取名为 Id_beneficio 的值并将其作为整数返回。有什么建议? :(
[[UPDATE]]
现在有了新的建议,我获得了它的价值
然而在控制台节目中,sql命令顺利执行
Beneficio Load (1.0ms) SELECT id_beneficio FROM `beneficios` WHERE (id_beneficio = '3') ORDER BY `beneficios`.`Id_beneficio` ASC LIMIT 1
Completed 500 Internal Server Error in 11ms (ActiveRecord: 1.0ms)
RQRCode::QRCodeArgumentError (The passed data is NilClass, not String):
和获取值的新方法
private def get_id_beneficio(idBuscado)
Beneficio.select('id_beneficio')
.where('id_beneficio = ?', "#{idBuscado}")
.limit(1)
.first
.id
end
答案 0 :(得分:1)
我猜你可以指定获取查询结果中的第一个元素。当您使用FrameGrabber grabber = FrameGrabber.createDefault(0);
grabber.start();
// Frame to capture
Frame frame = null;
CanvasFrame cFrame = new CanvasFrame("Some Title", CanvasFrame.getDefaultGamma()/grabber.getGamma());
while((frame = grabber.grab())!=null){
if (cFrame.isVisible())
{
cFrame.showImage(frame);
}
}
时,它会为您提供ActiveRecordRelationship,尽管使用where
。
你有很多方法可以让它发挥作用,因为在将{3}传递给find
时将idBuscado
作为结果的ID,例如:
get_id_beneficio
或访问idBuscado = get_id_beneficio(3).id
变量中的ID:
qrcode
或者配置get_id_beneficio私有方法以从第一条记录中获取id,例如:
私人
qrcode = make_qrcode(idBuscado.id)
任何两个第一个操作都需要您访问第一个记录,否则您尝试从AR关系中获取ID,而不是单个记录。
请注意,您不需要为要使其设置为私有的所有方法添加私有,只需将保留字和每个声明的方法放下来,这将是私有方法。
答案 1 :(得分:0)
结果我需要的方法是
private def get_id_beneficio(idBuscado)
Beneficio.where(id_beneficio: idBuscado).pluck(:id_beneficio).first
end
然后将我获得的值转换为带有idNumero.to_s的字符串