我想通過說明我對Ruby開發很新,但是,我個人致力於嘗試自己找到答案,而不是在論壇上異想天開地提問。這就是說,這是我的第一個官方「職位」,我盡我所能在發帖時做到準確和簡潔。RoR ActiveRecord find_by_sql問題
我有一個MSSQL 2005數據庫,我連接到,使用RoR ActiveRecord & RubyGems ADO。
在我的AR基類中,我運行了一個find_by_sql語句,它執行一個多表SELECT語句。我的查詢按預期執行,並且驗證了返回的數據是準確的。
我的目標:
我需要查詢的MSSQL 2005數據庫,然後傾倒返回給.csv文件中的數據。
我的計劃來完成這個工作:
- 使用Ruby寶石& ADO連接到MSSQL數據庫
- 使用Ruby AR使用find-通過-SQL查詢數據庫(由於查詢的性質)
- 使用Ruby FasterCSV檢索數據並將其轉儲到.csv文件。
目前的情況:
我能夠成功連接到數據庫,並使用AR查詢數據。
問題:
一旦發現逐SQL查詢運行,AR在散列數組返回數據。 正如我之前所說的,我是AR新人,現在已經在RoR開發了幾個月。因此,我不知道如何訪問數組的屬性。
這是我到目前爲止有:
require 'rubygems'
require 'activerecord'
require "fastercsv"
ActiveRecord::Base.pluralize_table_names = false
ActiveRecord::Base.establish_connection(
:adapter => 'sqlserver',
:mode => 'ODBC',
:dsn => 'xxxx',
:database => 'xxxx',
:username => 'blah',
:password => 'blahblah',
:host => 'server'
)
class Dp_display < ActiveRecord::Base
od30 = Dp_display.find_by_sql("SELECT dd.acct_no, dd.cur_bal, dd.od_dt, ra.email_1
FROM dp_display dd, rm_acct ra
WHERE dd.rim_no = ra.rim_no and dd.cur_bal < -10 and dd.class_code = 125 and
dd.od_dt = convert(varchar, getdate()-30,101)
ORDER BY dd.od_dt desc");
#testing od30 returning values successfully
puts od30
結果:
當我看着od30,被正確返回的所有數據。數據看起來像這樣(只列出第一個數組元素):使用FasterCSV
od30 = Array (2 elements)
+[0] = {Dp_display}#<Dp_display:0x7667d74>
[email protected] = Hash (4 elements)
+'acct_no'-> 1122334455
+'email_1'-> [email protected]
+'cur_bal'-> -333.55
+'od_dt'-> 2009-09-08 00:00:00.000
+[1] = {Dp_display}#<Dp_display:0x7667d10>
,我執行以下操作:
FasterCSV.open("c://file30.csv", "w") do |csv|
csv << od30
CSV文件創建成功後,當我打開它,它只包含:
<Dp_display:0x7667d74>
我想獲得的是:
1122334455,whodat @磨片re.com,-333.55,2009-09-08 00:00:00。000
爲了學習/測試的目的,我嘗試過使用許多不同的數組函數訪問數組元素,包括model.attributes,each_index,flatten,然後放置結果。不幸的是,我無法弄清楚。
在任何情況下,我想出了相同的結果:
同樣,我知道,有一段時間,我能想出一個複雜的解決方案,但現在,我想盡量保持簡單(因爲我是開發新手,並試圖學習小步驟)。
任何援助將不勝感激(即使只是指着我在正確的方向將是偉大的!)。
謝謝。
感謝同行!這工作完美。 在看了你推薦的內容之後,很明顯我並沒有把數組元素當作對象。相反,我傾倒數組本身,而不是它的元素。 非常感謝您幫助我解決問題! – 2009-10-08 17:22:22