15 votes

Trier une table_for dans rails activeadmin

Dans une page d'administration active, j'ai deux panneaux, le premier étant l'enregistrement principal, le second étant les informations associées (par has_many). show ressemble à ceci :

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

Puis-je trier cette colonne de haut en bas (ou de bas en haut) sur la colonne du montant ?

Mise à jour : j'ai trouvé la source de la démo ( https://github.com/gregbell/demo.activeadmin.info/blob/master/app/admin/users.rb ) qui semble faire le tri mais qui ne fonctionne pas lorsqu'on se rend sur le site de démonstration. Cette fonctionnalité est-elle peut-être désactivée ? Existe-t-il une solution de contournement ?

17voto

idrinkpabst Points 668

La seule façon que j'ai trouvée pour le faire était un peu bricolée. ActiveAdmin transmet le nom de la colonne et l'asc/desc via le hash params, puis vous pouvez l'ajouter à votre requête.

Veillez également à indiquer "sortable : true" dans l'appel à 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

8voto

Gab Points 1049

Avec rails 4.2, basé sur @idrinkpabst, j'ai fait ce qui suit :

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

Il s'agit d'une version plus robuste :

  • permet un nom de colonne avec un trait de soulignement
  • support "no sort param" (pas de paramètre de tri)
  • fonctionne avec rails 4.2

4voto

Ruto Collins Points 875

ActiveAdmin permet désormais de trier les tableaux.

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

Ceci, grâce au screencast de Ryan Bates : http://railscasts.com/episodes/284-active-admin?view=asciicast

0voto

SMAG Points 91

Développer ce qui a été accepté Réponse

Je recommanderais une solution plus "universelle" :

Le problème vient des noms de colonnes comportant un trait de soulignement. _ ou la nécessité de trier des valeurs d'attributs imbriqués, comme indiqué dans le document suivant Question . L'argument order doit contenir le nom de la table associée, qui peut contenir un trait de soulignement _ également. Cette solution échoue lorsque cela se produit.

Toutefois, une modification mineure résout ce problème et peut être utilisée dans les deux cas :

Quote.order(params[:order].gsub('_', ' ')

devient, comme le suggère et l'explique cette Réponse

Quote.order(params[:order].sub(/.*\K_/, " ")

panel "P&L" do
  table_for Quote.order(params[:order].sub(/.*\K_/, " ")), 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

Si vous souhaitez éviter les expressions rationnelles, je vous recommande de chercher d'autres solutions à ce problème Question qui répond à vos besoins.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X