gpt4 book ai didi

ruby-on-rails - rails 。按数组过滤 Postgres 对象。错误 : malformed array literal

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

无法处理数组过滤。这:

@profiles = Profile.filter(params.slice(:location, :status, :items))

要过滤的传递记录:

def filter(filtering_params)
results = self.where(nil)
puts filtering_params

filtering_params.each do |key, value|
if value.is_a?(Array)
results = results.public_send(key, value.to_s) if self.where("#{key}", value)
else
results = results.public_send(key, value) if value.present?
end
end
results
end

但是 Postgres Array 有一些问题。传递给 filter 的参数方法是:

Parameters: {"utf8"=>"✓", "location"=>"0", "status"=>"0", "items"=>["0", "1"], "commit"=>"Filtruoti"}

方法接收它们:

{"location"=>"0", "status"=>"0", "items"=>["0", "1"]}

但是我得到错误:

PG::InvalidTextRepresentation: ERROR: malformed array literal: "0" LINE 1: ..." = $2 AND "profiles"."items" IN ('0', '1') ... ^

DETAIL: Array value must start with "{" or dimension information. : SELECT "profiles".* FROM "profiles" WHERE "profiles"."location" = $1 AND "profiles"."status" = $2 AND "profiles"."items" IN ('0', '1') LIMIT $3 OFFSET $4

这个错误实际上指向了我想显示接收到的记录的位置:

<% rofiles.each do |profile| %>

这个 Postgres 数组发生了什么……?

gem 'rails', '~> 5.0.3'
gem 'pg', '~> 0.18'

编辑:

看起来 t 现在适用于范围:

scope :items, -> (items) { where "items && ARRAY[?]::integer[]", items } 

和:

def filter(filtering_params)
results = self.where(nil)

filtering_params.each do |key, value|
puts value
if value.is_a?(Array)
value = [0, 1, 2]
results = results.public_send(key, value) if self.where("key && ARRAY[?]::integer[]", value)
else
results = results.public_send(key, value) if value.present?
end
end
results
end

最佳答案

ActiveRecord 不会自动为数组类型列创建查询。

可以通过以下方式查询数组列:

Profile.where("items@> ARRAY[?]::varchar[]", ["0", "1"])
# or
Profile.where("items@> ARRAY[?]::integer[]", [0, 1])

但是如果 items 是您应用程序中的一个模型,您应该改为创建一个连接表。数组不能替代关系数据建模。

关于ruby-on-rails - rails 。按数组过滤 Postgres 对象。错误 : malformed array literal,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47144628/

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