gpt4 book ai didi

ruby-on-rails - rails activerecord 'where' 搜索数组

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

您好,我的搜索查询有问题,有 3 个值(val1、val2、标签),其中一个是数组(标签)。我知道 rails 不支持数组,但 Postgres 支持,我已经安装了它。

我有一个示范 Action :

  def self.find_object(val1, val2, tags)
if tags.blank?
Object.where( val1: val1, val2: val2 ).to_a
else
Object.where( "val1 = ? and val2 = ? and tags = [?]", val1, val2, tags).to_a
end
end

但是我得到一个错误:

PG::SyntaxError: 错误:“[”处或附近的语法错误 第 1 行:...此处(val1 = 'Ziemia' 和 val2 = '1' 和标签 = ['Jadeit']... ^ : SELECT "objects".* FROM "objects"WHERE (val1 = 'Ziemia' 和 val2 = '1' and tags = ['Jadeit'])

我的问题是我不知道如何处理数组搜索。在我的测试应用程序中,像这样的代码 >> Student.where("hobby && ARRAY[?]", hobby) 其中 hobby 是一个数组有效,所以这是我在这个例子中的开始。如果有任何提示如何处理这个问题,我将很高兴 :)

编辑:添加了错误信息

最佳答案

在 PostgreSQL 中创建数组有两种语法:

  • 数组[1,2,3]
  • '{1,2,3}'

所以这些中的任何一个都可以工作:

Object.where( "val1 = ? and val2 = ? and tags = ARRAY[?]", val1, val2, tags).to_a
# or
Object.where( "val1 = ? and val2 = ? and tags = '{?}'", val1, val2, tags).to_a

但是请注意,当使用 '{}' 语法时,PostgreSQL 期望字符串在双引号中(而不是通常的单引号),因此将此语法与字符串数组和 ActiveRecord 一起使用将失败。我建议您始终使用永远不会失败的 ARRAY[] 语法。

关于ruby-on-rails - rails activerecord 'where' 搜索数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31769951/

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