Why does Rails 3 with Mysql2 Gem ActiveRecord::Base.connection.execute(sql) return Array not Hash?

前端 未结 5 1394
深忆病人
深忆病人 2021-01-31 22:43

I\'m in the process of upgrading an application to Rails 3. I\'ve decided to go with the mysql2 gem. There\'s some legacy code in the app that makes calls like:

         


        
相关标签:
5条回答
  • 2021-01-31 22:47

    instead of

    result = ActiveRecord::Base.connection.execute(sql)
    

    do

    results = ActiveRecord::Base.connection.exec_query(sql)
    

    And that'll do exactly what you want. In particular,

    results.first
    

    will be a hash, and so on.

    Thanks to @_fx for figuring this out!

    For more, see http://api.rubyonrails.org/classes/ActiveRecord/ConnectionAdapters/Mysql2Adapter.html#method-i-exec_query

    0 讨论(0)
  • 2021-01-31 22:55

    Improving dan's answer, Rails 3.2.8 won't accept RAILS_ENV.

    
        config = ActiveRecord::Base.configurations[Rails.env].symbolize_keys
        conn = Mysql2::Client.new(config)
        conn.query("select * from users").each do |user|
            # user should be a hash
        end
    
    
    0 讨论(0)
  • 2021-01-31 22:56

    If you just want to reuse the database.yml configuration, you can do this:

    config = ActiveRecord::Base.configurations[RAILS_ENV].symbolize_keys
    conn = Mysql2::Client.new(config)
    conn.query("select * from users").each do |user|
      # user should be a hash
    end
    
    0 讨论(0)
  • 2021-01-31 22:57
    results = ActiveRecord::Base.connection.select(sql) 
    

    table header

    results.first.keys.each do |key|
     key
    end
    

    table data

    results.each do |result| %>
      result.values.each do |value| %>
        value
      end
    end
    
    0 讨论(0)
  • 2021-01-31 23:09

    I faced a similar issue a while back and found this to work:

    result = ActiveRecord::Base.connection.execute(sql) 
    result.each(:as => :hash) do |row| 
       row["field"] 
    end
    

    edit: you could also use the select_all method of the connection object that returns a hash

    0 讨论(0)
提交回复
热议问题