我有一些复杂的布尔方法,我想用它们作为数据库查询结果的过滤器。我想要一个适用于SQL和Mongoid DB的解决方案。
class Bar < ActiveRecord::Base OR include Mongoid::Document
[field :some_field]
def method1?
...
end
def method1?
...
end
这就是我想写的:
def self.someFunc
Bar.where(some_field: some_value).filter(method1?, method2?)
end
是否有比这更简单的方法:
def self.someFunc
results = Array.new
Bar.where(some_field: some_value).each do |result|
if result.filter1? && result.filter2?
results << result
end
end
results
end
答案 0 :(得分:1)
好的,我实际上使用了三种不同的技术来实现我的目标:named_scopes,布尔函数和数组过滤
This link explains array filtering
在我的代码中(使用named_scopes,regexp和filtering):
# Named scopes :
scope :current_team, ->{ where(mandate: Constants.mandate)}
# Boolean function :
def prez?
self.role.downcase =~ /.*pre[sident|z].*/
end
# Array filtering :
def self.prez
Bar.current_team.select {|admin|admin.prez?}
end.first