Ruby on rails ActiveRecord嵌套数组

Ruby 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

当使用数组作为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.country
工作正常,但依赖于某些手动连接转义,这似乎并不理想,也不容易推广到该范围之外。

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将仅为单个列创建查询,而不会将列列表与您尝试创建的查询等值集相匹配。