我正在使用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'被设置为字符串。这就是前任开发人员的做法。
答案 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)