我在名为order_by_ids(ids)
的模型上有一个类方法,该方法由ActiveRecord Relation调用。下面是其用法示例:
User.where(id: [1,2,3]).order_by_ids([2,1,3])
...将按以下顺序返回用户1、2和3:[2,1,3]
如果传递一个空数组,我希望它返回原始关系(基本上什么也不做)。
以下内容返回整个类,而不仅仅是返回它所调用的关系:
return self unless ids.present?
以下内容可以100%起作用,但是看起来不太优雅。另外,我认为它会运行不必要的查询(无论如何在控制台中似乎都比较慢):
return where.not(id: nil) unless ids.present?
是否有一种快速的方法来返回它所调用的关系?从理论上讲,我可以将其设置为一个范围,但是已经教我避免使用带参数的范围(请参阅this指南以供参考)。
注意:我正在使用Rails 3,所以all
返回一个数组。我实际上是在寻找all
的Rails 4版本。
答案 0 :(得分:1)
以下内容应保留上游范围链(返回all
,而不是self
):
return all if ids.none?
P.S。命名范围是一种完全可接受的传统查询处理方式。