2009-07-16 92 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

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 
+0

链接给404 ... – Rekin 2010-12-22 10:20:35

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 2009-07-17 05:03:26

+0

对不起,是的,它应该有结束标签。你传入了什么参数? 稍后尝试一下,看看我能不能调试 – 2009-07-17 09:14:21

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 2010-12-22 10:18:35

2

尝试Datagrid - Ruby库,可帮助您可以用以下方式构建并表示类似于表格的数据:

  • 定制过滤
  • 排序顺序
  • 本地化
  • 导出为CSV