Rails排序宝石
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Rails排序宝石相关的知识,希望对你有一定的参考价值。
我想创建一个修改ActiveRecord::Base
select
方法的宝石。例如,当我包含我的gem并输入:
Somemodel.all
它应该返回一个按id排序的数组,但是按降序而不是按升序排序。我不知道应该怎么样。我不想创建其他方法,如:
Somemodel.where(name: "John").revert_it
但只是做:
Somemodel.where(name: "John")
我想知道修改ActiveRecord::Base
方法,但它没有任何意义。 IMO最好的方法是在每个ActiveRecord::Base
方法之后进行回调。
答案
您可以使用ActiveRecord
方法default_scope
来实现此目的:
class MyModel < ActiveRecord::Base
default_scope { order("id DESC") }
end
MyModel.all
# => SELECT * FROM my_models ORDER BY id DESC
另一答案
修改任何核心ActiveRecord
方法是不可取的(除非你有一个非常好的理由),因为这将在未来造成很多混乱。
即使您正在考虑修改选择,您也要确保始终返回ActiveRecord relation
,以便它可以作为标准方式链接,
对于您的示例,AR已经有一个方法
User.all.reverse
另一答案
我得到了完全有效的答案:
def self.included(base)
base.class_eval do
default_scope { order(id: 'desc') }
end
end
上面的方法应该在某个模块内,然后模块包含在某个模型类中
以上是关于Rails排序宝石的主要内容,如果未能解决你的问题,请参考以下文章