检查是否已将限制应用于ActiveRecordRelation

时间:2019-02-11 14:24:42

标签: activerecord

我遇到了将某些条件应用于AR关系的情况,但是这些条件无法用SQL表示。用户访问此功能的方式类似于以下内容:

ar_relation = Model.all
filter = Filter.new
results_array = filter.filter(ar_relation, limit: 10, offset: 10)

这允许用户在应用其他过滤之前将自己的条件添加到ar_relation

我遇到了以下问题:Filter将排除结果中的行,因此需要注意limitoffset。但是,这对于用户而言并不明显。如果他们在limit上添加offsetar_relation,则会中断Filter中的处理。

我建议的解决方案是让Filter检查ar_relation是否为offsetlimit并抛出ArgumentError(如果已提供)。但是,从AR文档中,我认为不可能询问AR关系的当前限制是什么。这可能吗?

1 个答案:

答案 0 :(得分:1)

使用#limit_value

User.limit(4).limit_value
# => 4

作为对未来的暗示,我发现这通常比挖掘AR文档要快:

User.limit(4).public_methods.grep /limit/