나는 Ruby 개발에 대해 상당히 새롭다는 말로이 질문을 서두르고 싶지만, 개인적으로, 나는 포럼에서 우스꽝스럽게 묻는 질문에 반대하여 직접 대답을 찾으려고 노력하고있다. 즉, 이것이 내 첫 공식 "게시물"이며, 게시 할 때 정확하고 간결한 모든 시도를했습니다.RoR ActiveRecord find_by_sql 질문
RoR ActiveRecord를 사용하는 MSSQL 2005 데이터베이스가 있습니다. & RubyGems ADO.
내 AR 기본 클래스에서 다중 테이블 SELECT 문을 실행하는 find_by_sql 문을 실행하고 있습니다. 내 쿼리가 예상대로 실행되고 있으며 반환 된 데이터가 정확한지 확인했습니다.
내 목표 :
내가 MSSQL 2005 데이터베이스를 조회 한 다음 .csv 파일로 반환되는 데이터를 덤프해야합니다.
이러한 목표를 달성하기 위해 내 계획은 다음과 같습니다
- 사용 루비 보석 & ADO 발견별로-SQL을 사용하여 데이터베이스를 조회 할 MSSQL DB
- 사용 루비 AR에 연결하기 위해 (때문에에 쿼리의 성격)
- 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 볼 때
, 모든 데이터가 올바르게 반환되고있다. 내가 다음을 수행,
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 사용 : 데이터는 (첫 번째 배열 요소를 나열) 다음과 같습니다 CSV 파일이 성공적으로 생성
FasterCSV.open("c://file30.csv", "w") do |csv|
csv << od30
, 나는 그것을, 그것을 열 때 만 포함
<Dp_display:0x7667d74>
내가 얻기 위해 노력하고 있어요 것은 :
1122334455 @ 갔지 whodat re.com, -333.55,2009-09-08 00:00:00.000
학습/테스트 목적으로, 나는 model.attributes, each_index, flatten을 포함하여 많은 다른 배열 함수를 사용하여 배열 요소에 액세스를 시도한 다음 결과를 저장하려고 시도했습니다. 불행히도, 나는 그것을 알아낼 수 없다. 어떤 경우
, 나도 같은 결과를 가지고 올 :을 다시, 나는 약간의 시간과 함께, 내가 정교한 솔루션을 가지고 올 수 있다는 것을 알고 있지만, 지금, 나는 시도하고 간단하게 할 (나는 새로운 것을 개발하고 작은 단계를 배우려고 노력한다).
모든 도움을 주시면 감사하겠습니다 (단순히 올바른 방향으로 나를 가리켜 주어도 좋을 것입니다!).
감사합니다.
감사 피어! 그것은 완벽하게 작동했습니다. 추천 한 내용을 살펴본 후에 배열 요소를 객체로 간주하지 않는다는 것이 분명 해졌습니다. 대신 배열 자체를 덤핑하고 요소가 아닙니다. 알아서 도와 주셔서 감사합니다. –