【发布时间】:2017-10-03 10:44:36
【问题描述】:
刚刚学习 JSON 数据类型,想知道 Rails 是否创建了一个很棒的快捷方式来进行排序。假设我有
object_a.payload = { "category_1" => 2, "category_2" => 1 }
object_b.payload = { "category_1" => 1 }
object_c.payload = { "category_2" => 3, "category_3" => 4 }
我想写这样的东西:
["category_1", "category_2", "category_3"].each do |cat|
ordered_list = Object.where("payload->>'cat' != ?", nil).order(..on the values of the cat key..)
puts "#{cat} = #{ordered_list}"
end
->
"category_1 = object_b, object_a"
"category_2 = object_a, object_c"
"category_3 = object_c"
2 个挑战:
如何在
where语句中插入cat?对于有效载荷中的给定键(如果存在),不知道从哪里开始根据哈希值进行排序
可以低效地做到这一点(设想 2 个语句,首先是 Object.select { |o| o.payload[cat].present? }),但希望通过 where 语句有效地做到这一点,希望只有一个语句
【问题讨论】:
-
试试
Object.where("payload ->> ? IS NOT NULL", cat)-- 但是.order()似乎不支持绑定参数,但是手动插值确实是一个丑陋的解决方法。 PS:在 SQL 中你需要 f.ex。ORDER BY payload -> 'category_1'如果payload是jsonb列。对于json,您可能需要演员:ORDER BY CAST(payload ->> 'category_1' AS INTEGER)。
标签: ruby-on-rails json ruby postgresql activerecord