add_column :ssr_service_markets, :origin, :string, array: true, default: []
当我想要
时SSRService::Market.where(origin: "*", destination: "*").first
我有
PG::InvalidTextRepresentation: ERROR: malformed array literal: "*"
LINE 1: ...service_markets" WHERE "ssr_service_markets"."origin" = '*'
DETAIL: Array value must start with "{" or dimension information
如何解决?
答案 0 :(得分:1)
在Postgres中,要检查数组是否包含给定元素,您可以使用@>
数组运算符。
了解详情:Array Operators
:origin
是ssr_service_markets
表中的数组字段,这意味着它可以包含多个值。
在您的示例中,假设destination
也是一个数组字段,您可以尝试以这种方式进行搜索:
Model.where(["origin @> ? AND destination @> ?", '{*}', '{*}')"])
在使用array values时,请记住使用花括号。
要将数组值写为文字常量,请将该元素括起来 花括号内的值[...]