Return 带有 activerecord 的 jsonb 字段的元素 select

Return element of jsonb field with activerecord select

如何 'select' 来自 jsonb 存储字段的值?

例如

@model1:
data: {"special_date" => "Wed, 16 Mar 2016 11:20:20 -0700", ....}
@model2:
data: {"special_date" => "Wed, 23 Mar 2016 11:20:20 -0700", ....}

我想要

Model.all.select("data -> 'special_date'")

这并不完美,因为它使用的是 pluck 而不是 select,但是

Model.pluck("data -> 'special_date'")

或者如果您需要不止一列

Model.pluck(:id, "data -> 'special_date'")

有效。

如果你想要一个稀疏的 ActiveRecord 模型实例来保存数据(而不是数组中的基元),你只需使用 select:

model = Model.select("data -> 'special_date' as special_date'").first
model.id #=> nil
model.special_date = #=> "Wed, 23 Mar 2016 11:20:20 -0700"

如果要从 jsonb 列中获取整个记录以及特定数据,可以链接 select:

model = Model.select('*').select("data -> 'special_date' as special_date").first
model.id #=> 42
model.special_date #=> "Wed, 23 Mar 2016 11:20:20 -0700"

如果您根本不需要 ActiveRecord 实例,只需使用 pluck:

Model.pluck("data -> 'special_date' as special_date")