我遇到了将某些条件应用于AR关系的情况,但是这些条件无法用SQL表示。用户访问此功能的方式类似于以下内容:
ar_relation = Model.all
filter = Filter.new
results_array = filter.filter(ar_relation, limit: 10, offset: 10)
这允许用户在应用其他过滤之前将自己的条件添加到ar_relation
。
我遇到了以下问题:Filter
将排除结果中的行,因此需要注意limit
和offset
。但是,这对于用户而言并不明显。如果他们在limit
上添加offset
或ar_relation
,则会中断Filter
中的处理。
我建议的解决方案是让Filter
检查ar_relation
是否为offset
或limit
并抛出ArgumentError
(如果已提供)。但是,从AR文档中,我认为不可能询问AR关系的当前限制是什么。这可能吗?
答案 0 :(得分:1)
使用#limit_value
User.limit(4).limit_value
# => 4
作为对未来的暗示,我发现这通常比挖掘AR文档要快:
User.limit(4).public_methods.grep /limit/