【发布时间】:2015-01-16 01:08:02
【问题描述】:
我有一个值数组:
words = ['foo', 'bar', 'baz']
我想用 LIKE(而不是“IN”)自动生成 where 子句。
我现在做什么:
words = params[:content].split(' ').map { |w| "%#{w.strip}%" }
where = []
words.size.times do
where << 'name LIKE ?'
end
tags = Tag.where(where.join(' OR '), *words)
生成正确的请求 SQL:
SELECT `tags`.* FROM `tags` WHERE (name LIKE '%foo%' OR name LIKE '%bar%' OR name LIKE '%baz%')
但这不是很好的方式......
当我想将数组值与等号进行比较时,我们可以这样做:
Tag.where(name: words)
有可能做同样的事情但不生成IN,而是多个OR LIKE "%VALUE%"?怎么样?
【问题讨论】:
标签: mysql sql arrays ruby-on-rails-4 rails-activerecord