【问题标题】:Default sort versions with papertrail带有 papertrail 的默认排序版本
【发布时间】:2014-04-23 17:52:55
【问题描述】:

我在 Rails 4 应用程序中使用 paper_trail gem,我想设置默认排序顺序。 papertrail 没有模型,只有控制器和初始化器。

我可以把它放在哪里?我必须为它创建一个模型吗?

default_scope order('created_at DESC')

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-4 paper-trail-gem


    【解决方案1】:

    我发现我可以在每个 do 块中使用 reverse。

    versions.reverse.each

    因为我现在不需要比这更复杂的了。

    【讨论】:

    • 如果您只有少量版本,这仍然有效,但如果数量较多,性能将非常糟糕。
    • 我也是用limit来获取最新的10个左右的版本,这个方法行不通,因为paper_trail好像默认是按照created_at ASC排序的。
    • 这不适用于分页。戴夫 T 的回答确实如此。 versions.reorder(created_at: :desc)
    【解决方案2】:

    还有重新排序命令。

    http://apidock.com/rails/ActiveRecord/QueryMethods/reorder

    versions.reorder('created_at DESC')
    

    它将替换任何先前的顺序,从而忽略 Papertrail 的预定义顺序。

    【讨论】:

      【解决方案3】:

      正确的方法是通过 unscope 删除之前的排序,然后根据需要进行设置:

      http://api.rubyonrails.org/classes/ActiveRecord/QueryMethods.html#method-i-unscope

      例如:

      somethings.version.merge(PaperTrail::Version.unscope(:order)).order('created_at DESC')
      

      这将为您提供正确排序的正确查询

      【讨论】:

      • 有趣。我不知道 unscope 。我会试试这个。谢谢。
      【解决方案4】:

      在 paper_trail gem 中找到 version.rb。我电脑上的目录如下所示。添加:

      scope :by_date_desc, lambda { unscope(:order).order('created_at DESC') }
      

      unscope 需要删除链中的先前订单(感谢 maxigs)。当然使用你最喜欢的范围名称。为我工作。

      C:\Ruby200\lib\ruby\gems\2.0.0\gems\paper_trail-4.0.0.beta2\lib\paper_trail\frameworks\active_record\models\paper_trail\version.rb

      【讨论】:

        猜你喜欢
        • 2018-02-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-02-11
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多