2009-07-16 1 views
4

Я ищу хороший генератор таблицы RoR (или простое решение), который может дать мне достойный обзор моих записей в таблице (неэтилированный, но правильный строгий XHTML).Ruby on Rails Генератор HTML-таблицы

Скажем, у меня есть модель пользователя и адрес модели: - Пользователь может иметь много адресов - один адрес также связан как «primary_address»

Допустим, у меня есть следующие в моем контроллере пользователя

def index 
    @users = User.find(:all,:order => 'id ASC') 
    @headers = ["id","First","Last","City","State"] 
    @fields = [:id,:firstname,:lastname,:primary_address.city,:primary_address.state] 
end 

Я не знаю, будет ли массив полей работать, но я думаю, что он перекрещивается. Кто-нибудь знает хороший камень, плагин или технику для этого, так что мне не нужно «повторять себя» во всех моих табличных представлениях?

ответ

6

@ChrisH: Представление таблицы с использованием двух массивов не даст больше контроля. Я хотел бы предложить следующее: table_helper

Еврорадио фрагмент -

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

Ссылка дает 404 ... – Rekin

+1

Рекин, ссылка работала на меня прямо сейчас, повторите попытку. Спасибо – Ninad

3

вы можете сделать один с помощью помощника?

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 

Следует использовать с осторожностью! Непроверенные.

+0

Это было немного полезно, но это не совсем работает. Не уверен, что происходит. Может быть, это мои входы, но я не могу заставить его генерировать таблицу. Обратите внимание, что вам также не хватает конечных тегов после двух строк td. – chrishomer

+0

Извините, да, у него должны быть теги конца. Какие параметры вы передаете? Попробуй позже, когда у меня появится момент, и посмотрю, смогу ли я отлаживать –

1

Я знаю, что это не очень, но у меня было так много проблем с «content_tag», я решил, что это не стоит моего времени и просто сохраняется в строке. Я бы скорее использовал эту функцию, но время более ценно, чем элегантность прямо сейчас. Возможно, я вернусь и выясню это в будущем, но пока это функционально и в любом случае улучшает CSS-методы.

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

Как насчет элементов управления «show | edit | delete»? – Rekin

2

Это один я закончил с использованием в той же ситуации:

https://github.com/lunich/table_for

+0

СПАСИБО. Выглядит многообещающе. Веселье по-прежнему получил ответы на вопросы, которые я опубликовал 2 года назад! – chrishomer

2

Попробуйте Datagrid - рубин библиотека, которая помогает вы должны создавать и представлять табличные данные с:

  • Настраиваемая фильтрация
  • Колонны
  • Сортировка
  • Локализация
  • Экспорт в CSV