Migramos nuestra base de datos de sqlite3 a postgreSQL. Ahora, en la siguiente línea, obtenemos un error:
def self.get_table_id(id) sql = "SELECT id FROM configtables WHERE parent = 'check' AND parentid = " + id.to_s results = connection.execute(sql) return nil if results.empty? # here's where the error happens return results[0][0] end Tengo menos conocimiento de Ruby y ActiveRecords y también con postgreSQL. ¿El valor en los results es un postgres-object , o cuál es #<PG::Result:0x007fcc82900a78> y qué pasó con la base de datos sqlite3 ?
Esta función es una de las pocas con cadenas SQL sin formato.
empty? no está definido para PG::Result :
PG::Result.instance_methods.include?(:empty?) #=> false ¿Para usar empty? debe convertir el resultado en una instancia de Array:
results.to_a.empty?Parece que deberías "obtener" los resultados reales del objeto PG::Result .
Una forma de hacerlo podría ser llamando to_a
Prueba lo siguiente:
sql = "SELECT id FROM configtables WHERE parent = 'check' AND parentid = " + id.to_s results = ActiveRecord::Base.connection.execute(sql).to_a ...