SQL-запрос к Rails-запросу (Case Statement) - PullRequest
0 голосов
/ 18 марта 2019

Это мой SQL-запрос:

SELECT
  user_id,
  CASE responsible WHEN 1 THEN "true" ELSE "false" END AS responsible
FROM user_departments

Как мне написать это в рельсах? Я попытался запрос, как показано ниже:

Department.first.users.joins(:user_departments).select("users.*, CASE WHEN user_departments.responsible = 1 THEN true ELSE false END AS responsible")

но это не работает. Как мне исправить этот запрос?

1 Ответ

0 голосов
/ 18 марта 2019

Я не очень хорошо знаю Ruby или ваш SQL-фреймворк, но я вижу, что запрос, который вы запускаете из своего кода Ruby, не совпадает с литеральным запросом, который работает. Попробуйте эту версию, которая помещает true и false в одинарные кавычки.

Department.first.users.joins(:user_departments).select("users.*, CASE WHEN user_departments.responsible = 1 THEN 'true' ELSE 'false' END AS responsible")

Если в вашей базе данных SQL нет ключевых слов true или false, то ваша текущая версия может интерпретироваться как ссылка на столбец с именем true или false.

Для краткого учебника по SQL строковые литералы обычно следует помещать в одинарные кавычки, а не двойные кавычки. Двойные кавычки предназначены для идентификаторов, таких как имена столбцов и таблиц. И true или false сами по себе как литералы имеют смысл только в том случае, если ваша база данных SQL поддерживает их как ключевые слова.

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