我目前正在我的模型中使用范围来在数据库中执行搜索。我可以堆叠这些范围,它将输出匹配所有参数的结果。
scope :search_between, lambda{|begin_date, end_date|
where "sub.date BETWEEN ? AND ?", begin_date, end_date
}
我遇到的问题是整合关键字搜索,搜索整个数据库并输出包含关键字总和的结果。我想做这样的事情(显示为简单):
scope :keywords, lambda{|search|
search.chomp.split(/,\s*/) do |item|
where "date like ? or city like ? or state like ?", "%#{item}%" and
where "date like ? or city like ? or state like ?", "%#{item}%" and
where "date like ? or city like ? or state like ?", "%#{item}%"
end
}
我目前正在使用这样的东西来处理搜索多个列:
scope :keywords, lambda{|search|
search.chomp.split(/,\s*/) do |item|
where(Sub.column_names.map {|cn| "#{cn} like ?" }.join("or "), "%#{item}%"] Sub.column_names.size)).join(' AND ')
end
}
我的问题是我想在范围内做多个“where()”。是否可能,如果可能,怎么样?
答案 0 :(得分:1)
只需将其转换为返回范围的方法:
def self.keywords(search)
scope = self.scoped
search.chomp.split(/,\s*/).each do |item|
scope = scope.where(["date like ? or
city like ? or
state like ?", "%#{item}%","%#{item}%","%#{item}%"])
end
scope
end
缺点是您不能将关键字链接到其他范围,但您可以将其他范围与关键字链接起来。
答案 1 :(得分:0)