Ruby on rails RoR ActiveRecord按sql问题查找
我想在回答这个问题之前说,我对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时,所有数据都被正确返回。数据如下所示,仅列出了第一个数组元素: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数
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