Un jour, une gem

21/03/2012

Mercredi c'est Datagrid

gem install datagrid

Pour les amoureux des tableaux

Quel plaie de devoir mettre en place un tableau triable (sans JS) ! Pas de panique, il y a une gem pour chaque chose, et chaque chose a sa gem — à méditer.

Voici Datagrid qui permet d’avoir un résultat rapidement et proprement afin de se concentrer sur le reste (s’il reste quelque chose à faire). Pour l’utiliser, on crée un model qui n’hérite pas d’ActiveRecord, une classe vide, et on lui ajoute ces quelques lignes :

include Datagrid
  # on définit le model utilisé dans notre tableau ici User
  scope do
    User
  end
  # les différents filtres
  filter(:email, :string)
  filter(:disabled, :eboolean)
  filter(:registration_type, :enum, :select => User::REGISTRATION_TYPES.map {|r| [r.humanize, r]})
  integer_range_filters(:logins_count, {:default => proc { User.minimum(:logins_count)}}, {:default => proc {User.maximum(:logins_count)}})
  date_range_filters(:registered_at)
  # les colonnes que l'on souhaite afficher
  column(:id)
  column(:email, :url => proc {|user| "mailto:#{user.email}"})
  column(:registration_type) do |record|
    record.registration_type.humanize
  end
  column(:logins_count)
  column(:registered_at)
  column(:disabled) do
    self.disabled? ? "Yes" : "No"
  end

Ensuite dans l’action et le controller concernés on ajoute ceci :

@user_report = UserReport.new(params[:user_report])
    @assets = @user_report.assets.page(params[:page])

Et pour finir, une jolie vue utilisant pleins d’helpers pour encore plus de facilité :

<%= datagrid_table(@user_report, @assets) %>
  <%= paginate @assets %>

Le lien utile