Rails应用布尔方法来过滤查询结果

时间:2014-08-28 16:55:46

标签: ruby-on-rails ruby-on-rails-4

我有一些复杂的布尔方法,我想用它们作为数据库查询结果的过滤器。我想要一个适用于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

1 个答案:

答案 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