【发布时间】:2013-06-09 14:54:21
【问题描述】:
我正在努力使用 ruby 的 mysql gem 并准备语句。
我想以与 each_hash 相同的结果结束结果,但在准备语句中也不支持它。
所以我带着这个可怕的烂摊子来了。
stmt = @db.prepare("SELECT mat_id, name, qty FROM materials WHERE mat_id = ? ")
#those 3 lines hurt my eyes
res = stmt.execute(params[:id])
mat_id, name, qty = res.bind_result(Integer, String, Integer).fetch
@material = [mat_id: mat_id, name: name, qty: qty]
必须有更好的方法来获取结果并获取哈希数组。
更好的 mysql gem 可能是一个有效的答案。 ORM 不是。
【问题讨论】:
-
你试过
mysql2gem吗? -
一个 ORM 可能不是一个有效的答案,但您仍然应该查看 Sequel gem。它是我所知道的唯一一个让 SQL 爱好者感到自在的 ORM。
-
为什么 ORM 不是一个有效的答案?不是所有的都是一样的,虽然有些做得不好,但其他的像 Sequel,非常灵活和强大,可以显着减轻你的编程负担。查看您的代码,我可以看到它在哪里有帮助。 sequel.rubyforge.org/rdoc/files/doc/…
-
@SergioTulentsev mysql2 不支持准备好的语句
-
@TheDisintegrator:Sequel 与其说是一种 ORM,不如说是一种操作抽象语法树的工具。基本上,它允许您使用 ruby 操作 SQL 语法,并在您发出 fetch、insert 等时生成您想要的查询。您提到的 ORM 部分与该功能完全正交。将 Sequel 视为更高级且更红的 SQL gem,您将看到曙光。这是一款了不起的软件,我不知道其他语言中的任何等效软件。
标签: mysql ruby arrays hash prepared-statement