gpt4 book ai didi

ruby-on-rails - ActiveRecord::StatementInvalid (PG::UndefinedFunction

转载 作者:行者123 更新时间:2023-11-29 12:50:30 25 4
gpt4 key购买 nike

我有一个复选框字段 (car_options),用于存储多个选项的值数组。

我需要查询包含另一个数组中任何值的所有 Car 记录。

["a","b","c","d","e","f"] 包含以下任何一项 ["b", "z","v"]

架构

t.string "car_options", default: [], array: true

Check if attr array contains any of element from given array in Rails

我的查询:

 Car.where('car_options && ARRAY[?]', ["4door","3seat"])

错误

ActiveRecord::StatementInvalid (PG::UndefinedFunction: ERROR: operator does not exist: character varying[] && text[]) LINE 1: ...cars".* FROM "cars" WHERE (car_options && ARRAY['...^

HINT: No operator matches the given name and argument types. You might need to add explicit type casts. : SELECT "cars".* FROM "cars" WHERE (car_options && ARRAY['BY']) LIMIT $1

最佳答案

PostgreSQL 正在提示因为 ARRAY[?]最终成为 text[] (即 text 的数组)作为您的 car_options列是 character varying[] (即 character varying 的数组)。

你可以转换数组字面量:

Car.where('car_options && ARRAY[?]::varchar[]', ["4door","3seat"])

或将列设为 text[] :

t.text "car_options", default: [], array: true

我可能会选择后者,因为 PostgreSQL 处理 textcharacter varying在内部键入相同的内容,这是您唯一一次为 varchar 而烦恼(又名 character varyingt.string 在迁移中)是如果您对它们的长度有硬性限制(即使这样您也可以使用带有 CHECK 约束的 text)。

关于ruby-on-rails - ActiveRecord::StatementInvalid (PG::UndefinedFunction,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55274023/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com