ActiveRecord :: StatementInvalid: PG :: SyntaxError: ОШИБКА: синтаксическая ошибка в или около "," - PullRequest
0 голосов
/ 01 мая 2020

У меня возникли проблемы с запросом Activerecord. Мой текущий код выглядит так:

Table1.select(
  '"table1"*, CASE WHEN "table2"."id" = null THEN 0 WHEN "table2"."foo" = "yes" THEN 1 ELSE 2 END AS table2_status'
).from("table1").joins("table2").where(table3_id: object_from_table3.id)

Когда я запускаю это в pry (точка останова на irb в основном), я получаю следующую ошибку:

ActiveRecord::StatementInvalid: PG::SyntaxError: ERROR:  syntax error at or near ","

Это мой первый время создания сложного запроса, подобного этому, в Activerecord, и я не уверен, в чем проблема. Я не очень опытен с SQL. Возможно, я просто упускаю что-то простое, но любая помощь будет принята с благодарностью.

1 Ответ

0 голосов
/ 02 мая 2020

Я понял это. from("table1").joins("table2") образует некоторые плохие SQL.

"SELECT \"table1\"*, 
CASE 
  WHEN \"table2\".\"id\" = null THEN 0 
  WHEN \"table2\".\"foo\" = \"yes\" THEN 1 
  ELSE 2
END AS table2_status 
FROM table1 table2 // this part is invalid 
WHERE \"table1\".\"table3_id\" = 1299"

Я закончил тем, что сделал это вместо:

Table1
  .select('"table1"*, CASE WHEN "table2"."id" = null THEN 0 WHEN "table2"."foo" = "yes" THEN 1 ELSE 2 END AS table2_status')
  .from('"table1" LEFT OUTER JOIN "table2" ON "table2"."table1_id" = "stances"."id"')
  .where(table3_id: object_from_table3.id)

Это сформировало SQL правильно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...