Как передать массив рельсов mysql Где IN условие - PullRequest
0 голосов
/ 14 января 2019

У меня есть массив, как показано ниже,

 skills = ['ruby','Ruby on Rails'];

Я пытаюсь передать массив в MySQL, где условие, как показано ниже

 questions =  MysqlConnection.connection.select_all("
                   SELECT questions.*,quest_answers.* FROM `questions` 
                   INNER JOIN `quest_answers` ON `quest_answers`.`question_id` = 
                  `questions`.`id` where questions.category IN (#{skills.join(', ')})")

Но это не сработало, Как передать массив в состояние In.

Ошибка, которую я получаю

  Mysql2::Error: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'on rails,  Ruby)' at line 1:  SELECT questions.*,quest_answers.* FROM `questions` INNER JOIN `quest_answers` ON `quest_answers`.`question_id` = `questions`.`id` where questions.category IN (Ruby on rails,  Ruby)

1 Ответ

0 голосов
/ 14 января 2019

Вы передаете строковое представление массива в MySQL, что не работает. Вам нужно вставить значения в массиве в запрос. Это можно сделать, избежав навыков и присоединившись к ним:

skills.map { |s| "'#{s}'" }.join(', ')

В результате получается 'ruby', 'Ruby on Rails', который является допустимым аргументом для оператора IN.

Однако лучший подход - вообще не писать необработанный SQL, а полагаться на ActiveRecord для его генерации. Это более понятный и понятный подход.

Question.joins(:quest_answers).where(category: skills)

Передача массива в where автоматически преобразует его в подмножество .

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