Sort a table_for in rails activeadmin

后端 未结 3 907
谎友^
谎友^ 2021-02-19 15:52

In an active admin show page, I\'ve got two panels, the first being the primary record, the second being associated info (by has_many) so show looks like this:

相关标签:
3条回答
  • 2021-02-19 16:11

    With rails 4.2, based on @idrinkpabst, I did the following:

    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
    

    It's a more robust version:

    • allows column name with underscore
    • support "no sort param"
    • works with rails 4.2
    0 讨论(0)
  • 2021-02-19 16:20

    ActiveAdmin now supports table sorting.

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

    This, thanks to Ryan Bates's screencast: http://railscasts.com/episodes/284-active-admin?view=asciicast

    0 讨论(0)
  • 2021-02-19 16:26

    The only way I found to do it was a bit hacky. ActiveAdmin will pass in the column name and asc/desc via the params hash, then you can add that to your query.

    Also, make sure to pass "sortable: true" into the table_for call.

    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
    
    0 讨论(0)
提交回复
热议问题