3

我有一个名为“产品”的数据库,它有一个使用 hstore 的字段,名为data.

目前,在我的 index.html.haml 中,我只是遍历产品并将它们显示data为哈希:

- @products.each do |product|
  =product.data #THIS PRINTS A HASH
  %hr

例如,可以打印如下哈希:

{"Name"=>"Example","type"=>"book", "price"=>"7.99"}

我想制作一个 HTML 表格,它可以保存动态数量的键和值,并将它们打印到具有与键对应的值的列中。这是一个图表:

在此处输入图像描述

感谢大家的帮助!

4

1 回答 1

5

希望这可以帮助:

解决方案 1:基于相同的 .data 内容 # 已弃用

条件:

  • 所有 product.data 都具有相同数量的键/值对。
  • 所有产品的配对顺序都相同。

编码:

# headers
%tr
  - @products.first.data.keys.each do |attribute_name|
    %th= attribute_name
# body
- @products.each do |product|
  %tr
    - product.data.attributes.each do |attribute_value|
      %td= attribute_value

如果每个代码product.data具有相同数量的键/值对并以相同的顺序存储,则此代码将正确呈现。


解决方案 2:完全动态(.data 变化)# 推荐

条件:

  • product.data 的(key/val)对的数量在每个产品之间是不同的
  • 所有产品的配对顺序并不相同。

编码:

# we gather all possible attribute's name in the data hash:
- headers = @products.map(&:data).flat_map(&:keys).uniq

%tr 
  # we make a table-head cell for each attribute's name:
  - headers.each do |key|
    %th= key

- @products.each do |product|
  %tr # for each attribute's name, we display a TD cell and try to display it's value if exists
    - headers.each do |key|
      %td= product.data[key]

随意询问细节,我感觉我只是给你一段代码,没有任何解释......

于 2013-10-11T16:38:27.160 回答