【发布时间】:2020-08-04 18:23:16
【问题描述】:
假设我有一个名为books 的表,它有一个名为misc 的json 类型列,其中保存了一些杂项数据。使用 Rails/AREL 我想从所有书籍中提取 id 和页数 (num_pages)。
在psql 我可以做到以下几点:
SELECT id, misc->'num_pages' FROM books ;
id | ?column?
-------+---------------
23562 | "220"
22188 | "355"
(注意:上述查询使用--> 产生与-> 相同的结果。
我希望这会起作用:
pry> Book.select("id, misc->>'num_pages'")
Book Load(1.7ms) SELECT id, etc-->'num_pages' FROM "books"
Book Load(1.5ms) SELECT id, etc-->'num_pages' FROM "books"
=> #<Book::ActiveRecord_Relation:0x3ff7e934d8f4>
pry> Book.select("id, misc->'num_pages'")
Book Load(1.1ms) SELECT id, etc->'num_pages' FROM "books"
=> [#<Book:0x00007fefd3c11a68 id: 23562>, #<Book:0x00007fefd3c116a8 id: 22188>]
...当我删除 ->'num_pages' 部分时,它会返回整个 misc 字段(所以我知道它几乎在工作):
pry> Book.select("id, misc")
Book Load(0.9ms) SELECT id, etc FROM "books"
=> [#<Book:0x00007fefe4e99fb8
id: 23562,
etc:
{"num_pages"=>"220",
...
【问题讨论】:
-
当你运行你的两个 Rails AREL 时,你得到了什么?错误信息?没有?
-
我更新了问题给你看:)
-
我的回答有用吗?我不确定为什么 pluck 对 select 有效。
-
它有效 - 谢谢。我添加了我看到的弃用警告以及它方便地建议的解决方案。我仍然很想看到
select解决了这个问题。
标签: ruby-on-rails json postgresql arel