【发布时间】:2014-02-05 08:32:20
【问题描述】:
在ActiveRecord 模型上,我正在尝试动态创建具有多个 OR 条件的查询。即:
SELECT * from articles
WHERE (name LIKE '%a%' OR desc LIKE '%a%' OR
name LIKE '%b%' OR desc LIKE '%b%' OR
name LIKE '%c%' OR desc LIKE '%c%')
我认为我使用 arel 走在正确的轨道上,但我不知道如何开始查询。
class Article < ActiveRecord::Base
attr_accessor :title, :text
def self.search(terms)
terms = *terms
t = self.arel_table
query = terms.reduce(???) do |query, word|
search_term = "%#{word}%"
query.or(t[:title].matches(search_term).or(t[:text].matches(search_term)).expr).expr
end
where(query)
end
end
我最初是从this answer 那里得到这个想法的,但原来的query 显然是一个字符串,而不是我可以将.or 夹在上面的东西。
我需要在reduce 方法中替换??? 以使其工作,还是我需要采取完全不同的路径(我怀疑)?
【问题讨论】:
标签: ruby-on-rails arel