ActiveRecord> MySQL Adapter>未定义的方法`more_results'

时间:2010-09-28 14:51:41

标签: mysql ruby activerecord

我已将ActiveRecord合并到我正在编写的脚本中以处理MySQL数据库中的某些数据。在我的开发环境中,使用Mac OS X,一切正常,但是,当我尝试在Linux环境中部署脚本时,我不断收到以下错误:

/activerecord-3.0.0/lib/active_record/connection_adapters/mysql_adapter.rb:623:in `select': undefined method `more_results' for #<Mysql:0x915976c> (NoMethodError)

下面粘贴发生此错误的代码,特别是已注释的倒数第二行。

  def select(sql, name = nil)
    @connection.query_with_result = true
    result = execute(sql, name)
    rows = []
    result.each_hash { |row| rows << row }
    result.free
    @connection.more_results && @connection.next_result   # invoking stored procedures with CLIENT_MULTI_RESULTS requires this to tidy up else connection will be dropped 
    rows
  end

可以在https://rails.lighthouseapp.com/projects/8994/tickets/3151-mysql-adapter-update-to-enable-use-of-stored-procedures#ticket-3151-33

查看引入此代码的原因

那就是说,我仍然不确定如何解决这个错误而不只是评论出那个有问题的一行。我没有使用任何存储过程因此它不是一个重要的问题,但是,我想实现一个更可扩展的修复。

我在两种环境中使用以下宝石。

activerecord(3.0.0) mysql(2.8.1)

提前感谢您对此处可能发生的事情的任何想法!

1 个答案:

答案 0 :(得分:1)

我是Ruby(ha)的新手,在执行本教程时我遇到了同样的问题:http://guides.rubyonrails.org/getting_started.html在步骤6.1(迁移)中。

我只是将命令包装在if中以确保方法在调用之前实际存在,如下所示:

if (@connection.respond_to?('more_results'))
      @connection.more_results && @connection.next_result    # invoking stored procedures with CLIENT_MULTI_RESULTS requires this to tidy up else connection will be dropped 
end

然后我就可以完成教程了。我不知道在跳过这行代码时会有什么影响,但在我的小开发框中,它可能并不重要。