Ruby on rails ActiveRecord嵌套数组
当使用数组作为SQL输入时,是否存在用于清理数组数组的方法/模式 希望在ActiveRecord中实现以下查询样式: 挑选* 来自地址 其中address.city、address.state、address.country位于 “朱诺”、“AK”、“美国”, “奥尔巴尼”、“纽约”、“美国”, ... 例如: 搜索=[ ['Juneau','AK','US'], [“奥尔巴尼”、“纽约”、“美国”], ] searches_sql=searches.map do | search | {search.map{| query | Address.connection.quotequery}.join','} 结束,加入“,” 地址。其中{searches\u sql}中的%addresses.city、addresses.state、addresses.countryRuby on rails ActiveRecord嵌套数组,ruby-on-rails,rails-activerecord,Ruby On Rails,Rails Activerecord,当使用数组作为SQL输入时,是否存在用于清理数组数组的方法/模式 希望在ActiveRecord中实现以下查询样式: 挑选* 来自地址 其中address.city、address.state、address.country位于 “朱诺”、“AK”、“美国”, “奥尔巴尼”、“纽约”、“美国”, ... 例如: 搜索=[ ['Juneau','AK','US'], [“奥尔巴尼”、“纽约”、“美国”], ] searches_sql=searches.map do | search | {sea
工作正常,但依赖于某些手动连接转义,这似乎并不理想,也不容易推广到该范围之外。ActiveRecord实际上没有内置的方法来构造值查询中的WHERE列 但你可以用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
这很有趣-谢谢!,我不确定ActiveRecord是否有办法构建WHERE IN查询。例如,Address.wherecity:%w[Juneau Albany]在“Juneau”、“Albany”中的地址whereAddresss.city中生成一个查询SELECT addresses.*。括号周围似乎也存在一些格式问题,即不将城市/州/国家视为元组。是的,但AR将仅为单个列创建查询,而不会将列列表与您尝试创建的查询等值集相匹配。