我需要在后端处理过滤器数据并返回符合那些过滤条件的人员。过滤条件类似于((filter A or filter B or filter C) and (filter D or filter E))
过滤条件类似于“名称包含'名称'”。我有每个过滤条件的范围,就像
scope :contains,-> (params){ where('name ilike :name', name: params[:name]}
。
我打算用union
构造查询以对过滤器进行“或”运算。我计划使用to_sql获得每个过滤器User.contains(params)
的结果。并使用SQL联合将所有过滤器与或条件组合,并使用活动记录merge
组合和条件。
然后使用ActiveRecord::Base.connection.execute(sql)
执行原始查询。
还有其他更好的方法来处理此类过滤器吗?