Rails select_all deserialize Postgresql 配列
概要
配列値 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 で結果を解析し、代わりにネストされた配列を返すようにするにはどうすればよいですか?
解決策
あなた (私) は、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