2011-04-19 95 views
6

我正在使用pg gem与Ruby进行PostgreSQL交谈。有没有 更好的方法来检查是否没有结果比使用res.ntuples == 0是否有更简洁的方法来检查PGResult是否为空?

conn = PGconn.connect config 

cmd = "select * from labels inner join labels_mail using(label_id) " + 
    "where labels_mail.mail_id = $1 and labels.name = $2" 

res = conn.exec(cmd, [mail_id, mailbox]) 

if res.ntuples == 0 # <=== is there a better way to check this? 
    cmd = "insert into labels_mail (mail_id, label_id) values ($1, $2)" 
    conn.exec(cmd, [mail_id, label_id(mailbox)]) 
end 
+0

只是作为小费,我*高度*推荐使用[续](http://sequel.rubyforge.org/)ORM宝石在Postgres或MySQL,或几乎任何其他数据库。它允许您使用原始SQL或数据集,或充当与ActiveRecord类似的全面建模ORM。 – 2011-04-20 02:19:45

+0

谢谢。但出于性能方面的原因,我想保持与金属的接近。我用最少的开销启动时间来写东西。我尝试过积极的记录方法,而且启动时间远远不够。 – dan 2011-04-20 16:23:01

回答

5

ntuples,错字?这是更快,简洁的使用zero?== 0

if res.num_tuples.zero? 
+0

土耳其人适合我(第0.10.1页)。谢谢。我会使用'零?' – dan 2011-04-20 16:24:32

+0

'num_tuples'只是'ntuples'的别名。它们都产生相同的结果。好的猴子补丁(!) – 2012-07-12 07:03:24