2011-04-19 17 views
6

Estoy usando la gema pg para hablar con PostgreSQL desde Ruby. ¿Hay una forma mejor de verificar el si no hay resultados que usando res.ntuples == 0?¿Hay alguna forma más concisa de verificar si PGResult está vacío?

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

Del mismo modo que una punta, I * * altamente recomendar el uso de la [Sequel] (http://sequel.rubyforge.org/) ORM joya con Postgres o MySQL, o casi cualquier otra base de datos. Le permite usar SQL sin formato o conjuntos de datos, o actuar como un ORM de modelado completo similar a ActiveRecord. –

+0

Gracias. Pero quiero permanecer cerca del metal por motivos de rendimiento. Estoy escribiendo cosas con un mínimo de tiempo de arranque. Probé el enfoque de grabación activa y el tiempo de inicio fue muy lento. – dan

Respuesta

5

ntuples, a typo? Es más rápido y conciso utilizar zero? que == 0

if res.num_tuples.zero? 
+0

ntuples funciona para mí (pg 0.10.1). Gracias. Usaré 'cero?' – dan

+0

'num_tuples' es simplemente un alias para' ntuples'. Ambos producen los mismos resultados. Bueno ol 'parche de mono (!) –

Cuestiones relacionadas