【问题标题】:Rails select_all deserialize Postgresql arrayRails select_all 反序列化 Postgresql 数组
【发布时间】:2021-09-09 12:59:21
【问题描述】:

我做了一个自定义查询,它返回具有数组值 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 解析结果并返回嵌套数组?

【问题讨论】:

  • 你是什么 Rails 版本?
  • 您几乎错误地使用了 ruby​​ ...但无论如何您都在要求您的数据库返回一个字符串。如果您希望它是一个数组,您需要使用split,和/或设置一个模型来与“术语”表对话,然后使用 ruby​​ 进行分组
  • @JoelBlum 它的 Rails 6

标签: ruby-on-rails ruby postgresql activerecord


【解决方案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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-11
    • 1970-01-01
    • 2014-07-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多