5

我正在寻找一个好的 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

我不知道字段数组是否会起作用,但我认为它可以理解这一点。有没有人知道一个好的宝石、插件或技术,这样我就不必在我的所有表格视图上“重复自己”?

4

6 回答 6

7

@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
于 2010-07-31T10:22:16.893 回答
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

谨慎使用!未经测试。

于 2009-07-16T22:01:53.783 回答
2

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

https://github.com/lunich/table_for

于 2011-07-07T18:41:20.493 回答
2

试试Datagrid - Ruby 库,它可以帮助您构建和表示类似表格的数据:

  • 可定制的过滤
  • 排序
  • 本土化
  • 导出为 CSV
于 2011-11-23T19:37:30.833 回答
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
于 2009-07-17T13:20:01.553 回答
1

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

于 2012-07-13T13:46:04.620 回答