Если вы пытаетесь запустить raw SQL, вам, вероятно, не следует использовать connection.execute
. См. Документацию по методу execute
:
Выполняет оператор SQL в контексте этого соединения и возвращает необработанный результат из адаптера соединения. Примечание: в зависимости от вашего коннектора базы данных, результат, возвращаемый этим методом, может управляться вручную памятью. Попробуйте вместо этого использовать оболочку exec_query
.
execute
возвращает необработанные результаты из адаптера подключения. например, для PostgreSQL это PG::Result
объект.
Вы, вероятно, тоже не хотите использовать exec_query
, потому что он также вернет некоторые необработанные результаты.
Из чего Я вижу в вашем коде, вы, вероятно, хотите использовать find_by_sql
. Он выполняет запрос и возвращает стандартные объекты ActiveRecord:
namespace :expense do
desc "send emails"
task send_reminder: :environment do
sql = <<-SQL
sql truncated...
SQL
scope = Expense.find_by_sql(sql)
puts "#{scope}"
scope.each do |expense|
puts "#{expense}"
end
end
end