2011-04-19 101 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