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:
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
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
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
results = ActiveRecord::Base.connection.select(sql)
results.first.keys.each do |key|
key
end
results.each do |result| %>
result.values.each do |value| %>
value
end
end
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