3

我的 events.rb 中有以下代码。默认情况下,我将 sort_order 设置为 updated_at_desc。

但是如果 url 有一个参数ride_id (http://localhost:3000/admin/events?ride_id=3009) 我需要根据 created_at asc 对其进行排序。

它不工作。它仍然使用 sort_order updated_at_desc 获取结果。如何才能做到这一点。请帮忙。

下面的代码在我使用的以前版本的活动管理员上工作,但是当我将它更新到 0.5.0 时,我遇到了这个问题。

ActiveAdmin.register Event do
  config.sort_order = 'updated_at_desc'
  controller do
    def scoped_collection
      if params[:ride_id].present?
        end_of_association_chain.select('events.*').where('events.booking_id = ?', params[:ride_id]).order('created_at asc')
      else
       end_of_association_chain.select('events.*')
    end
  end
end

结尾

我还使用了重新排序功能

end_of_association_chain.select('events.*').where('events.booking_id = ?', params[:ride_id]).reorder('created_at asc')

我仍然无法通过 updated_at_desc 覆盖默认排序。请帮忙。

4

1 回答 1

2

如果你在某处设置使用类似的东西:

default_scope order: '... DESC'

您可以使用

.unscoped

像这样:

end_of_association_chain.select('events.*').unscoped.where...

至少这就是解决我的类似问题的原因。

请注意以下帖子指出使用 default_scope 是一个坏主意,这正是因为我/我们所经历的:

http://pragdave.blogs.pragprog.com/pragdave/2012/03/be-careful-using-default_scope-and-order.html

我希望这会有所帮助,
TheMahrvin

于 2012-12-21T14:22:11.890 回答