检查字符串是否包含Array中的元素

时间:2014-02-21 02:59:11

标签: ruby-on-rails activerecord

我正在使用Rails并学习ActiveRecord,我遇到了一个棘手的问题。这是我模型中的一个数组:

@sea_countries = ['Singapore','Malaysia','Indonesia', 'Vietnam', 'Philippines', 'Thailand']

这是我的ActiveRecord对象:

@sea_funding = StartupFunding.joins(:startup)
                             .where('startups.locations LIKE ?', '%Singapore%')

我要做的是返回一个结果,其中'locations'列中的字符串与Array中的任何元素匹配。我能够将字符串与数组的每个元素匹配(如上所述),但我不知道如何迭代整个数组,只要有一个匹配就包含该元素。

意图是具有多个地点'新加坡,马来西亚'的元素也将包含在@sea_funding中。

好吧,不要问我为什么'locations'被设置为字符串。这就是前任开发人员的做法。

3 个答案:

答案 0 :(得分:1)

您在.where过滤器中使用IN子句:

@sea_funding = StartupFunding.joins(:startup)
                             .where(["startups.locations IN (?)", @sea_countries])

答案 1 :(得分:0)

@sea_countries.include?(startups.locations)

如果可以在sea_countries数组中找到启动项中的locations列的值,则返回布尔值TRUE,如果不存在则返回false。

答案 2 :(得分:0)

这对你有用吗?

first = true
where_clause = nil

sea_countries.each do |country|
  quoted_country = ActiveRecord::Base.connection.quote_string(country)
  if first
     where_clause = "startups.locations LIKE '%#{quoted_country}%' "
     first = false
  else
     where_clause += "OR startups.locations LIKE '%#{quoted_country}%' "
  end
end

@sea_funding = StartupFunding.joins(:startup)
                             .where(where_clause)