繁体   English   中英

Ruby on Rails将数组结果迭代到查询中

[英]Ruby on Rails iterate array result into query

以下是查询的输出:

unless @slug == 'all'
  @city = '' if @city.blank?
  @city = @city.gsub("-", " ")
  country = Country.where("lower(name) LIKE ?", "#{@city.downcase}")
  gon.country = country
  if country.present?

  end
  if @city.present?
    @products = @products.where("lower(city) LIKE ? or lower(country) like ? or lower(state) LIKE ?", "%#{@city.downcase}%", "%#{@city.downcase}%","%#{@city.downcase}%")
    @city_obj = City.where("lower(name) LIKE ?", "%#{@city.downcase}%").first
  end
end

此处gon.country返回结果为:

Object
countries
:
Array[2]
0
:
"california"
1
:
"san francisco" 

我如何遍历各个countries并将其传递以获得@products结果?

您可以通过两种方式进行操作:

  1. 遍历所有国家/地区记录,然后添加类似的查询。

     @product = [] country.each do |con| @products << @products.where("lower(city) LIKE ? or lower(country) like ? or lower(state) LIKE ?", "%#{con.downcase}%", "%#{con.downcase}%","%#{con.downcase}%") end 
  2. 您可以使用核心sql的ILIKE语法。 像这样的工作:

     select * from table where value ilike any (array['%foo%', '%bar%', '%baz%']); # in your case country_array_with_percent = country.map {|con| "%#{con}%" } @products.where("name ILIKE ANY ( array[?] )", country_array_with_percent) 

您还可以使用或查询进行查询链接,更多详情请点击此处

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM