다음과 같은 방법으로 정상적으로 작동합니다. 그러나, 나는 그것이 추한 것 같아요. 저는 PHP 세계에서 왔고 Ruby를 배우는 중입니다. 이 방법을 쓰는 더 좋은 방법이 있습니까?Ruby DBI 행을 직접 수정하십시오.
def _get_tasks(project_id)
_tasks = $dbh.select_all("SELECT * FROM tasks WHERE project_id=? ORDER BY name ASC;",project_id)
tasks = []
_tasks.each do |t|
_t = t.to_h
_t[:log] = $dbh.select_all("SELECT * FROM log WHERE task_id=? ORDER BY start DESC;",t[:task_id])
tasks.push _t
end
return tasks
end
내 최초의 생각 (희망)은 다음과 겠지만, 작업 배열의 분명히 요소가 해시하지만 DBI 실제로하지 않기 때문에 그것은 잘못된 것입니다 : 행 객체. 어떤 포인터?
def _get_tasks(project_id)
tasks = $dbh.select_all("SELECT * FROM tasks WHERE project_id=? ORDER BY name ASC;",project_id)
tasks.each do |t|
t[:log] = $dbh.select_all("SELECT * FROM log WHERE task_id=? ORDER BY start DESC;",t[:task_id])
end
return tasks
end
왜 전역 변수를 사용합니까? 당신은 거의 필요하지 않습니다. 또한'row.by_field (: log)'를 시도해 보셨습니까? –
전역 변수는 전체 프로그램을 통해 단일 데이터베이스 연결을 공유하는 것입니다. 그리고 "row.by_field (: log)'는"log "라는 컬럼이 없기 때문에 작동하지 않을 것이다. 특정 작업에 대한 로그 테이블의 행을 잡고 작업 테이블의 내 작업 해시 화살표로 추가하려고합니다. – jasonlfunk
그럼이 코드가하는 일을 이해하지 못합니다. 아니요, DB 행은 해시가 아니며 DB 행입니다. 새로운 해시를 만들고, 정말로 필요하다면 이미했던 것처럼 (나는 의심 스럽다). 또한 전역 변수는 절대 필요하지 않습니다 *. 프로젝트를 별도의 모듈로 분할하고 여기에 DB 연결과 같은 종속성을 생성자 인수로 주입해야합니다. –