ruby-on-rails Rails类型如何强制转换array_agg()函数的结果

cwtwac6a  于 2023-02-01  发布在  Ruby
关注(0)|答案(1)|浏览(174)

我试图在Rails4中应用这个内联视图技巧https://gist.github.com/jturkel/7917985#file-inline_view_model-rb。但是我的视图中有一列将返回一个由postgresql的构建函数array_agg()生成的数组。

class Product < ActiveRecord::Base
  defult_scope { set_from_clause }

  def self.set_from_clause
    query = Product.joins(:tags)
              .group("products.id")
              .select("products.id", "Array_agg('tags.id') AS tag_ids")

    from(query, table_name)
  end

  def self.columns
   [
      ActiveRecord::ConnectionAdapters::Column.new('product_id', nil, ActiveRecord::Type::String.new),
      ActiveRecord::ConnectionAdapters::Column.new('tag_ids', nil, ActiveRecord::Type::Integer.new),
    ]
  end
end

这个示例代码不起作用,因为Array_agg返回的值不能正确地进行类型转换。我想知道是否有一种方法可以使这个技巧在示例中的tag_ids上起作用。

jgzswidk

jgzswidk1#

使用json_agg代替array_agg,然后使用JSON.parse方法解析它。

相关问题