如何在活动管理员0.5.0的scoped_collection中覆盖默认排序顺序

时间:2012-11-14 06:07:41

标签: ruby-on-rails-3.2 activeadmin

我在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覆盖默认排序。请帮忙。

1 个答案:

答案 0 :(得分: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