Генератор HTML-таблиц Ruby on Rails - PullRequest
4 голосов
/ 17 июля 2009

Я ищу хороший генератор таблиц RoR (или простое решение), который мог бы дать мне приличное представление о моих записях в таблице (нестилизованный, но надлежащий строгий XHTML).

Допустим, у меня есть модель User и модель Address: - Пользователь может иметь много адресов - Один адрес также связан как "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 ]

6 голосов
/ 31 июля 2010

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

erb snippet -

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
3 голосов
/ 17 июля 2009

Вы могли бы сделать один с помощью помощника?

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

Используйте с осторожностью!Непроверенные.

2 голосов
/ 23 ноября 2011

Try Datagrid - библиотека ruby, которая помогает вам создавать и представлять табличные данные с помощью:

  • Настраиваемая фильтрация
  • Колонны
  • Порядок сортировки
  • Локализация
  • Экспорт в CSV
2 голосов
/ 07 июля 2011

Это тот, который я использовал в той же ситуации:

https://github.com/lunich/table_for

1 голос
/ 13 июля 2012

Я недавно запустил проект на GitHub, попробуйте: https://github.com/cthulhu666/easy_table

1 голос
/ 17 июля 2009

Я знаю, что это не красиво, но у меня было так много проблем с тегом "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
...