0
我有以下方法可以正常工作。不过,我认为这很丑陋。我来自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)'? – 2012-03-02 23:21:57
全局变量是通过整个程序共享一个数据库连接。而'row.by_field(:log)'将不起作用,因为没有名为“log”的列。我试图从日志表中获取特定任务的行,并将它们作为箭头添加到任务表中的任务哈希中。 – jasonlfunk 2012-03-02 23:55:04
那么我不明白这段代码是干什么的。不,数据库行不是散列,它是数据库行。只要创建一个新的散列,并且像你已经做过的,如果你真的需要(我怀疑)。另外,全局变量从不需要*。你应该将你的项目拆分成不同的模块,并将依赖关系(如DB连接)作为构造函数参数注入真正需要它们的对象中。 – 2012-03-02 23:57:51