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排序宝石的主要内容,如果未能解决你的问题,请参考以下文章

Rails:红宝石在导轨上的未知属性错误

Rails宝石“Axlsx”/“Rails-Axlsx” - 添加图像

在 rails3 中使用回形针宝石

ruby rails3创建自己的红宝石宝石

如何在 Rails 6 中使用茧宝石

带有红宝石集合/可枚举的酷技巧和富有表现力的片段[关闭]