#ruby-on-rails #ruby #postgresql #activerecord
Вопрос:
Я делаю пользовательский запрос, который возвращает строки со значением массива term_names
Product.connection.select_all("
SELECT ARRAY_AGG(terms.name), vocabularies.name vocabulary_name
FROM terms
INNER JOIN vocabularies ON vocabularies.id = terms.vocabulary_id
GROUP BY vocabulary_name")
| term_names | vocabulary_name |
|----------------------------------------------------------------|-----------------|
| {{76,Yellow},{77,Green},{79,Blue}. | Color |
Но проблема в том, что Rails не хочет преобразовывать {…} в массив ruby и возвращает его в виде строки.
[{"array_agg"=>"{Yellow,Green,Blue}", "vocabulary_name"=>"Color"}]
Как я могу заставить Rails анализировать результат и вместо этого возвращать вложенный массив?
Комментарии:
1. какая у вас версия Rails?
2. Вы в значительной степени неправильно используете ruby … Но в любом случае вы просите свою базу данных вернуть строку. Если вы хотите, чтобы это был массив , вам нужно будет использовать
split
и/или настроить модель для работы с таблицей «термины», а затем использовать ruby для группировки3. @JoelBlum его рельсы 6
Ответ №1:
Вы (я) должны вызвать метод cast_values
Product.connection.select_all("
SELECT ARRAY_AGG(terms.name), vocabularies.name vocabulary_name
FROM terms
INNER JOIN vocabularies ON vocabularies.id = terms.vocabulary_id
GROUP BY vocabulary_name").cast_values