gpt4 book ai didi

ruby-on-rails - ActiveRecord 嵌套数组

转载 作者:行者123 更新时间:2023-12-04 09:47:44 26 4
gpt4 key购买 nike

将数组用作 SQL 输入时,是否存在清理数组的任何方法/模式?

希望在 ActiveRecord 中实现以下查询样式:

SELECT *
FROM "addresses"
WHERE ("addresses"."city", "addresses"."state", "addresses"."country") IN (
('Juneau', 'AK', 'US'),
('Albany', 'NY', 'US'),
...
)

例如:

searches = [
['Juneau', 'AK', 'US'],
['Albany', 'NY', 'US'],
]

searches_sql = searches.map do |search|
"(#{search.map { |query| Address.connection.quote(query) }.join(', ')})"
end.join(', ')
Address.where(%(("addresses"."city", "addresses"."state", "addresses"."country") IN (#{searches_sql})))

工作但依赖于一些看起来并不理想的手动连接转义(并且在这个范围之外不容易推广)。

最佳答案

ActiveRecord 实际上没有内置的方式来构建 WHERE columns IN values询问。

但是你可以用 Arel 做到这一点:

class Address
def self.search(sets)
where(
Arel::Nodes::In.new(
[:city, :state, :country].map { |c| arel_table[c] },
sets.map do |set|
Arel::Nodes::Grouping.new(
set.map {|value| Arel::Nodes.build_quoted(value)}
)
end
)
)
end
end

关于ruby-on-rails - ActiveRecord 嵌套数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62072992/

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