Ruby on Rails HTML-Table生成器

时间:2009-07-16 21:52:53

标签: ruby-on-rails ruby rubygems ruby-on-rails-plugins

我正在寻找一个好的RoR表生成器(或一个简单的解决方案),它可以让我在一个表中找到我的记录(未经校正但严格的严格XHTML)。

假设我有一个用户模型和一个地址模型: - 用户可以拥有多个地址 - 一个地址也链接为“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

我不知道字段数组是否可行,但我认为它可以解决问题。有没有人知道一个好的宝石,插件或技术,所以我不必在我的所有表格视图上“重复自己”?

5 个答案:

答案 0 :(得分:6)

@ChrisH:使用两个数组表示表将不会提供更多控制。我建议如下:table_helper

erb代码段 -

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

答案 1 :(得分: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

谨慎使用!未经测试。

答案 2 :(得分:2)

这是我在相同情况下最终使用的那个:

https://github.com/lunich/table_for

答案 3 :(得分:2)

尝试使用Datagrid - ruby​​库,它可以帮助您构建和表示类似于表的数据:

  • 可自定义过滤
  • 排序顺序
  • 本地化
  • 导出为CSV

答案 4 :(得分:1)

我最近在GitHub上开了一个项目,试一试: https://github.com/cthulhu666/easy_table