Rails - find_by_sql с heredoc вызывает ошибку - PullRequest
0 голосов
/ 16 ноября 2018

У меня есть этот простой SQL в heredoc

sql = <<-SQL
  SELECT SUM(price) as total_price, 
    SUM(distance) as total_distance, 
    TO_CHAR(date, 'YYYY-MM') as month
  FROM Rides
  WHERE user_id = #{current_user.id}
  GROUP_BY month
SQL

и вызов find_by_sql(sql)

Ride.find_by_sql(sql).each do |row|
  "#{row.month}: { total_distance: #{row.total_distance}, total_price: #{row.total_price} }" 
end

, и возникает ошибка:

ActiveRecord::StatementInvalid: PG::SyntaxError: ERROR:  syntax error at or near "GROUP_BY"
LINE 6:         GROUP_BY month
                ^
:         SELECT SUM(price) as total_price, 
          SUM(distance) as total_distance, 
          TO_CHAR(date, 'YYYY-MM') as month
        FROM Rides
        WHERE user_id = 1
        GROUP_BY month

AsВы можете видеть, что он отлично выполняет интерполяцию user_id, поэтому проблема не в интерполяции.

Это работает, если я назначаю этот SQL переменной в виде строки, например:

str = "select sum(distance) as total_distance, sum(price) as total_price, to_char(date, 'YYYY-MM') as month from rides where user_id = #{ current_user.id } group by month"

Чтопроблема с heredoc?

1 Ответ

0 голосов
/ 16 ноября 2018

SQL имеет предложение GROUP BY, а не GROUP_BY.

sql = <<-SQL
  SELECT SUM(price) as total_price, 
    SUM(distance) as total_distance, 
    TO_CHAR(date, 'YYYY-MM') as month
  FROM Rides
  WHERE user_id = #{current_user.id}
  GROUP BY month
SQL
...