传递的数据是ModelObject :: ActiveRecord_Relation,而不是String Rails 5

时间:2017-09-11 18:03:42

标签: ruby-on-rails ruby

我试图使用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

以及显示... Error

的错误

我现在需要如何获取名为 Id_beneficio 的值并将其作为整数返回。有什么建议? :(

[[UPDATE]]

现在有了新的建议,我获得了它的价值

new error

然而在控制台节目中,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

2 个答案:

答案 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的字符串