Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/53.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails RoR ActiveRecord按sql问题查找_Ruby On Rails_Activerecord_Fastercsv - Fatal编程技术网

Ruby on rails RoR ActiveRecord按sql问题查找

Ruby on rails RoR ActiveRecord按sql问题查找,ruby-on-rails,activerecord,fastercsv,Ruby On Rails,Activerecord,Fastercsv,我想在回答这个问题之前说,我对Ruby开发相当陌生,但是,就我个人而言,我一直致力于自己寻找答案,而不是在论坛上异想天开地提问。这就是说,这是我的第一个正式职位,我已尽一切努力在我的职位上准确和简洁 我有一个MSSQL2005数据库,我正在连接,使用RorActiveRecord和RubyGemsADO 在我的AR基类中,我正在运行find_by_sql语句,该语句正在执行一个多表SELECT语句。我的查询正在按预期执行,我已验证返回的数据是否准确 我的目标是: 我需要查询MSSQL 2005数

我想在回答这个问题之前说,我对Ruby开发相当陌生,但是,就我个人而言,我一直致力于自己寻找答案,而不是在论坛上异想天开地提问。这就是说,这是我的第一个正式职位,我已尽一切努力在我的职位上准确和简洁

我有一个MSSQL2005数据库,我正在连接,使用RorActiveRecord和RubyGemsADO

在我的AR基类中,我正在运行find_by_sql语句,该语句正在执行一个多表SELECT语句。我的查询正在按预期执行,我已验证返回的数据是否准确

我的目标是:

我需要查询MSSQL 2005数据库,然后转储返回到.csv文件的数据

我的计划是:

使用ruby gems和ADO连接到MSSQL数据库 由于查询的性质,使用Ruby-AR使用findby-sql查询数据库 使用Ruby FasterCSV检索数据并将其转储到.csv文件中。 当前情景:

我能够成功连接到数据库,并使用AR查询数据

问题:

一旦findbysql查询运行,AR将以散列数组的形式返回数据。 正如我之前所说,我是AR新手,并且已经在RoR中开发了几个月了。因此,我不知道如何访问数组的属性

以下是我目前掌握的情况:

结果:

当我查看od30时,所有数据都被正确返回。数据如下所示,仅列出了第一个数组元素:

    od30 = Array (2 elements)
      +[0] = {Dp_display}#<Dp_display:0x7667d74>
          +@attributes = Hash (4 elements)
             +'acct_no'-> 1122334455
             +'email_1'-> whodat@where.com
             +'cur_bal'-> -333.55
             +'od_dt'-> 2009-09-08 00:00:00.000
      +[1] = {Dp_display}#<Dp_display:0x7667d10>
使用FasterCSV,我执行以下操作:

    FasterCSV.open("c://file30.csv", "w") do |csv|
      csv << od30
csv文件已成功创建,当我打开它时,它仅包含:

<Dp_display:0x7667d74>
我想得到的是:

1122334455,whodat@where.com,-333.552009-09-08 00:00:00.000

出于学习/测试目的,我尝试使用许多不同的数组函数访问数组元素,包括model.attributes、每个_索引、展平,然后放入结果。不幸的是,我想不出来

无论如何,我得出了相同的结果:

再一次,我知道,经过一段时间,我可以想出一个详细的解决方案,但现在,我想尝试保持它的简单,因为我是开发新手,并尝试学习一些小步骤

任何帮助都将不胜感激,即使只是简单地为我指出正确的方向将是伟大的

谢谢。

find\u by\u sql仍将尝试将结果映射到对象,在您的情况下,Dp\u显示对象。由于它们是ActiveRecord对象,您可以像访问任何属性一样访问它返回的列,但是表中不存在的任何派生列都将是只读的

看起来您正在尝试转储一个对象数组,而不是单独转储每个对象。试着这样做:

FasterCSV.open("c://file30.csv", "w") do |csv|
  csv << ['here', 'are', 'my', 'headers']
  od30.each |o|
     csv << [o.acct_no, o.email_1, o.cur_bal, o.od_dt]
  end
end
这是我的想法,可能有一种更简单的方法,通过匹配标题键和属性来实现。祝你好运

同级

或只是

FasterCSV.open("c://file30.csv", "w") do |csv|
  od30.each |o|
     csv << o
  end
end

谢谢同行!这非常有效。在查看了您的建议之后,我清楚地意识到,我没有将数组元素视为对象。相反,我转储的是数组本身,而不是它的元素。非常感谢你帮我解决这个问题!我可以看到这里的逻辑,但当我更改为代码以反映这一点时,我收到一个错误:“each”:没有给定LocalJumpError的块此错误指的是包含以下内容的行:od30.each | o | RubyMine IDE还指示“o”无法解析为有效目标。
FasterCSV.open("c://file30.csv", "w") do |csv|
  od30.each |o|
     csv << o
  end
end