ruby 如何查询jsonb string字段在数组中的记录

2vuwiymt  于 2022-12-22  发布在  Ruby
关注(0)|答案(1)|浏览(116)

我想查询ActiveRecord集合并选择记录,其中jsonb字段内的字符串值包含在给定数组中。
型号:

create_table "dishes", force: :cascade do |t|
    ...
    t.jsonb     "params"
    ...
end

params的内容始终具有以下结构:

{"procart_id"=>"4", "procart_config"=>{}}

我有一个给定的数组:

availabilities = ['4', '8', '11']

如何查询params.procart_idavailabilities数组中的Dish型号?
我尝试了以下方法:

Dish.where("params::jsonb ->> 'procart_id' = any (array[?])", availabilities)

但它给了我错误:

ActiveRecord::StatementInvalid: PG::InvalidTextRepresentation: ERROR:  invalid input syntax for type json
DETAIL:  The input string ended unexpectedly.
CONTEXT:  JSON data, line 1: 
: SELECT "dishes".* FROM "dishes" WHERE (params::jsonb ->> 'procart_id' = any (array['4', '8', '11']))
dgsult0t

dgsult0t1#

在查询Dish模型和procart_id查询之前,可以修改查询参数,如下所示:

availabilities = ['4', '8', '11']
query_params = availabilities.map { |availability| { procart_id: availability } }
Dish.where(params: query_params)

相关问题