我一直在寻找这方面的提示,到目前为止还没有真正的运气.使用mysql2 gem,尝试执行返回多个结果集的存储过程使我无法返回此上下文错误中的结果.我发现有人建议使用MysqL gem(我无法找到两者之间有什么不同以及切换时可能遇到的内容的解释),并且我已经有了更多的进展.
这是我到目前为止所拥有的:
>> db = ActiveRecord::Base.connection.raw_connection
=> #<MysqL:0x1056ae3d8>
>> ActiveRecord::Base.connection.select_all("CALL p_rpt_test('','');")
=> [{"Header"=>"Client,Project,Type,Due Date,Assigned To"}]
>> db.more_results?
=> true
>> db.next_result
MysqL::Error: Commands out of sync; you can't run this command now
from (irb):3:in `next_result'
from (irb):3
最佳答案
好吧我还没弄明白如何让AR这样做所以我最终只是进入低级并使用MysqL驱动程序本身,这主要是工作…
data = Array.new
db = ActiveRecord::Base.connection.raw_connection
header = db.query("CALL #{self.proc}(#{args});")
header.each {|r| data << r}
if db.next_result
rows = db.store_result
rows.each {|r| data << r}
end
ActiveRecord::Base.connection.reconnect!
它有效,但我无法想象没有更好的方法.此外,我必须在此之后重新连接,或者我在下一个查询中收到错误,并且我还没有找到正确关闭会话的方法.哦,我必须使用MysqL gem而不是MysqL2.
Grrrrr.