【发布时间】:2021-07-05 09:32:01
【问题描述】:
以下数据存在于我的Color ActiveRecord 模型中:
| id | colored_things |
|---|---|
| 1 | [{"thing" : "cup", "color": "red"}, {"thing" : "car", "color": "blue"}] |
| 2 | [{"thing" : "other", "color": "green"}, {"thing" : "tile", "color": "reddish"}] |
| 3 | [{"thing" : "unknown", "color": "red"}] |
| 4 | [{"thing" : "basket", "color": "velvet or red or purple"}] |
colored_things 列定义为 jsonb。
我正在尝试搜索所有 "color" 键以获取与某个搜索词类似的值。这个 SQL 查询(见SQL Fiddle)就是这样做的:
SELECT DISTINCT C.*
FROM colors AS C,
jsonb_array_elements(colored_things) AS colorvalues(colorvalue)
WHERE colorvalue->>'color' ILIKE '%pur%';
现在我很想将此查询转换为正确的 Active Record 查询,但以下内容不起作用:
Color.joins(jsonb_array_elements(colored_things) AS colorvalues(colorvalue))
.where("colorvalue->>'color' ILIKE '%?%'", some_search_term)
.distinct
这给了我错误:
ActiveRecord::StatementInvalid(PG::UndefinedTable: 错误:对表“颜色”的 FROM 子句条目的引用无效)
有人能指出正确的方向吗?
【问题讨论】:
标签: sql ruby-on-rails postgresql activerecord ruby-on-rails-6