2009-07-16 4 views
4

Je recherche un bon générateur de table RoR (ou une solution facile) qui peut me donner une vue correcte de mes enregistrements dans une table (XHTML stricte mais non-stylée).Ruby on Rails Générateur de table HTML

Disons que j'ai un modèle utilisateur et un modèle d'adresse: - Un utilisateur peut avoir plusieurs adresses - Une adresse est également liée comme « primary_address »

Disons que je suit dans mon contrôleur de l'utilisateur Je ne sais pas si le tableau de champs fonctionnerait, mais je pense qu'il fait passer le point de vue. Est-ce que quelqu'un connaît une bonne gemme, un plugin ou une technique pour cela afin que je n'ai pas à me «répéter» sur toutes mes vues de table?

Répondre

6

@ChrisH: Représenter une table à l'aide de deux tableaux ne donnera pas plus de contrôle. Je suggère ce qui suit: table_helper

erb extrait -

collection_table(@posts, {}, :id => 'posts', :class => 'summary') do |header, body| 
    header.column :title 
    header.column :category 
    header.column :author 
    header.column :publish_date, 'Date< br \>Published' 
    header.column :num_comments, '# Comments' 
    header.column :num_trackbacks, '# Trackbacks' 

    body.alternate = true 
    body.build do |row, post, index| 
    row.category  post.category.name 
    row.author   post.author.name 
    row.publish_date time_ago_in_words(post.published_on) 
    row.num_comments post.comments.empty? ? '-' : post.comments.size 
    row.num_trackbacks post.trackbacks.empty? ? '-' : post.trackbacks.size 
    end 
end 
+0

Lien donne 404 ... – Rekin

+1

Rekin, lien a travaillé pour moi en ce moment, s'il vous plaît essayer à nouveau. Merci – Ninad

3

vous pourriez en faire un en utilisant un assistant?

def table_generator(collection, header_names, fields) 
    return false unless collection.any? 
    content_tag(:table, :class => "generic-table") do 
    content_tag(:thead) do 
     content_tag(:tr) do 
     header_names.each do |name| 
      content_tag(:td, name) 
     end 
     end 
    end 
    content_tag(:tbody) do 
     collection.each do |col| 
     content_tag(:tr) do 
      field_names.each do |name| 
      content_tag(:td, col.send(name)) 
      end 
     end 
     end 
    end 
    end 
end 

À utiliser avec prudence! Non testé

+0

Ce fut un peu utile mais ça ne marche pas vraiment. Pas sûr de ce qui se passe. Peut-être que c'est mes entrées mais je ne peux pas l'obtenir pour générer la table. Notez qu'il vous manque également des balises de fin après les deux lignes td. – chrishomer

+0

Désolé, oui, il devrait y avoir des tags de fin. Quels paramètres y passez-vous? J'essaierai plus tard quand j'ai un moment et voir si je peux déboguer –

1

Je sais que ce n'est pas joli mais j'avais tellement de problèmes avec le "content_tag" J'ai décidé que ça ne valait pas la peine de gagner du temps et que je l'ai juste sauvegardé dans une chaîne. Je préfère utiliser cette fonction, mais le temps est plus précieux que l'élégance en ce moment. Peut-être que j'y reviendrai et que je m'en rendrai compte à l'avenir, mais pour l'instant, c'est fonctionnel et ça force de meilleures pratiques CSS de toute façon.

def table_generator(collection, header_names, fields, class_name) 
    return false unless collection.any? 
    table_str = "" 
table_str += "<table id=\"" + class_name + "\" class=\"" + class_name + "\">\n" 
    table_str += "\t<thead>\n" 
    table_str += "\t\t<tr>\n" 
     header_names.each do |name| 
     table_str += "\t\t\t<th>" 
     table_str += name 
     table_str += "</th>\n" 
     end 
    table_str += "\t\t</tr>\n" 
    table_str += "\t</thead>\n" 
    table_str += "\t<tbody>\n" 
    collection.each do |col| 
     table_str += "\t\t<tr>\n" 
     fields.each do |name| 
      table_str += "\t\t\t<td>\n" 
      table_str += col[name].to_s 
      table_str += "\t\t\t</td>\n" 
     end 
     table_str += "\t\t</tr>\n" 
    end 
    table_str += "\t</tbody>\n" 
table_str += "</table>\n" 
end 
+0

Que diriez-vous des contrôles "show | edit | delete"? – Rekin

2

Essayez Datagrid - Bibliothèque rubis qui aide vous pour construire et représenter des données de type table avec:

  • filtrage personnalisables
  • Colonnes
  • Ordre de tri
  • Localisation
  • Exporter au format CSV