module ActiveRecordSearch
def where_one_of fields
relation = nil
fields.each do |key, value|
next unless value.present?
where = self.where(key => value)
relation = relation ? relation.or(where) : where
end
relation
end
end
ActiveRecord::Relation.class_eval do
include ActiveRecordSearch
end
ActiveRecord::Base.class_eval do
extend ActiveRecordSearch
end
4条答案
按热度按时间wqsoz72f1#
我可能错了,但我不认为你可以使用基于区域的where函数来构造查询;你需要自己建立数据库查询字符串。
假设你使用的是SQLite或Postgres:
我还没有测试过这段代码,但我怀疑这可能会为你做的工作。注意,这是不太“可移植”的代码;如果你改变了你正在使用的数据库,查询可能会中断。
kulphzqa2#
在Rails 4中,您还可以
Route.where(:a => true,:b => true,:c => [1,2]).all
这将找到c是1或2的地方。
zqry0prt3#
我认为罗布是对的,我还没有支持手术室。关于arel site:
OR运算符尚不受支持。它将像这样工作:
AND运算符的行为类似。
hgc7kmma4#
ActiveRecords中缺少常用的方法:
你可以添加以下补丁: