gpt4 book ai didi

ruby-on-rails - 如何使 ruby​​ 数组成为 ActiveRecord 准备语句中的 x、y、z

转载 作者:太空宇宙 更新时间:2023-11-03 16:47:03 25 4
gpt4 key购买 nike

我在 heroku 上使用 Ruby on Rails 3.20 和 Postgres 9.4 并且有以下碎片:

metro_area_ids=[3,4,7]
a=metro_area_ids.join(',')
self.where("metro_area_ids ilike '%-?-%' or metro_area_ids ilike '%-?-%' or metro_area_ids='%-?-%'", a) # how to make this array be 3,4,7 joining doesn't work

我希望能够传递从 1 到 10(作为任意上限)的值数组,并能够使用 postgres ilike 语句查询我们的表。

但是我明白了

ActiveRecord::PreparedStatementInvalid: wrong number of bind variables (1 for 2) in: metro_area_ids ilike '%-?-%' or metro_area_ids ilike '%-?-%'

对于数组中的任意数量的输入,我将如何做到这一点?

编辑

所以这行不通

Queryable.where("metro_area_ids ilike '%-?-%' or metro_area_ids ilike '%-?-%'",[1,13])

所以这确实有效,这正是我要模拟的:

Queryable.where("metro_area_ids ilike '%-?-%' or metro_area_ids ilike '%-?-%'",1,13)

最佳答案

这是因为您通过 ? 引用了很多参数,而只指定了一个(字符串),使用命名占位符或单独指定数组的每个元素。

使用命名占位符

metro_area_ids={ st: 3, nd: 4, th: 7 }
self.where("metro_area_ids ilike '%-:st-%' or metro_area_ids ilike '%-:nd-%' or metro_area_ids='%-:th-%'", metro_area_ids)

分别提供每个元素

self.where("metro_area_ids ilike '%-?-%' or metro_area_ids ilike '%-?-%' or metro_area_ids='%-?-%'", metro_area_ids[0], metro_area_ids[1], metro_area_ids[2]) 

关于ruby-on-rails - 如何使 ruby​​ 数组成为 ActiveRecord 准备语句中的 x、y、z,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31214859/

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