未定义的方法`空?'对于#<pg :: result:0x007fcc82900a78>

时间:2017-04-20 13:24:53

标签: ruby-on-rails ruby postgresql activerecord sqlite

我们将数据库从sqlite3迁移到postgreSQL。现在,在以下行中,我们收到错误:

  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

我对Ruby和ActiveRecords以及postgreSQL的了解较少。 results中的值是postgres-object,还是#<PG::Result:0x007fcc82900a78>以及sqlite3数据库中的值是什么?

此函数是少数具有原始sql-strings的函数之一。

2 个答案:

答案 0 :(得分:3)

empty?未定义为PG::Result

PG::Result.instance_methods.include?(:empty?)
#=> false

要使用empty?,您应该将结果转换为Array的实例:

results.to_a.empty?

答案 1 :(得分:2)

好像你应该从PG::Result对象“获取”实际结果 一种方法是调用to_a

尝试以下方法:

sql = "SELECT id FROM configtables WHERE parent = 'check' AND parentid = " + id.to_s
results = ActiveRecord::Base.connection.execute(sql).to_a
...