【发布时间】: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
我在 Rails 4 应用程序中使用 paper_trail gem,我想设置默认排序顺序。 papertrail 没有模型,只有控制器和初始化器。
我可以把它放在哪里?我必须为它创建一个模型吗?
default_scope order('created_at DESC')
【问题讨论】:
标签: ruby-on-rails ruby-on-rails-4 paper-trail-gem
我发现我可以在每个 do 块中使用 reverse。
versions.reverse.each
因为我现在不需要比这更复杂的了。
【讨论】:
versions.reorder(created_at: :desc)
还有重新排序命令。
http://apidock.com/rails/ActiveRecord/QueryMethods/reorder
versions.reorder('created_at DESC')
它将替换任何先前的顺序,从而忽略 Papertrail 的预定义顺序。
【讨论】:
正确的方法是通过 unscope 删除之前的排序,然后根据需要进行设置:
http://api.rubyonrails.org/classes/ActiveRecord/QueryMethods.html#method-i-unscope
例如:
somethings.version.merge(PaperTrail::Version.unscope(:order)).order('created_at DESC')
这将为您提供正确排序的正确查询
【讨论】:
在 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
【讨论】: