在rails activeadmin中对table_for进行排序

时间:2012-05-15 20:09:34

标签: ruby-on-rails activeadmin

在一个活跃的管理员显示页面中,我有两个面板,第一个是主要记录,第二个是关联信息(通过has_many),所以show看起来像这样:

panel "Max Amount" do
  table_for user.max_amount do
    column 'Amount', :amount
    column 'time', :updated_at
  end
end

我可以在金额列中对此从高到低(或从低到高)排序?

更新:我发现了演示(https://github.com/gregbell/demo.activeadmin.info/blob/master/app/admin/users.rb)的源代码,它似乎有排序但是当你去实际的演示网站时,它无法正常工作。这个功能可能会破坏吗?有解决办法吗?

3 个答案:

答案 0 :(得分:13)

我发现这样做的唯一方法就是有点hacky。 ActiveAdmin将通过params哈希传递列名和asc / desc,然后您可以将其添加到查询中。

另外,请确保将“sortable:true”传递给table_for调用。

panel "P&L" do
  table_for Quote.order(params[:order].gsub('_', ' ')), sortable: true do
    column("Revenue", sortable: :revenue) { |quote| number_to_currency quote.revenue }
    column("Profit", sortable: :profit)  { |quote| number_to_currency quote.profit  }
  end
end

答案 1 :(得分:7)

使用rails 4.2,基于@idrinkpabst,我做了以下内容:

table_for group.devices.order(
  # Support for column name with underscore
  # Support "no sort param"
  (params[:order] ? params[:order] : '').gsub('_asc', ' asc').gsub('_desc', ' desc')
), sortable: true do
  # Directly using symboles and not using sortable:
  column :presence
  column :serial_number
  column :apk_version
  column :firmware_version
end

它是一个更强大的版本:

  • 允许带有下划线的列名称
  • 支持"没有排序参数"
  • 使用rails 4.2

答案 2 :(得分:1)

ActiveAdmin现在支持表排序。

table_for ride.bookings.order('updated_at desc') do
  column :name
  column :created_at
end

这要感谢赖安·贝茨(Ryan Bates)的截屏视频:http://railscasts.com/episodes/284-active-admin?view=asciicast