动态显示html表中的哈希数组?

时间:2013-10-11 16:25:49

标签: html ruby-on-rails ruby hash

我有一个名为“products”的数据库,其中包含一个使用名为data的hstore的字段。

目前,在我的index.html.haml中,我只是循环浏览产品并将其显示为data作为哈希:

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

可以打印如下的哈希:

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

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

enter image description here

感谢您的帮助!

1 个答案:

答案 0 :(得分:5)

希望这可以提供帮助:

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

<强>条件:

  • 所有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变化)#Intevious

<强>条件:

  • 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]

随意询问细节,我觉得我刚给你一段代码而没有任何解释......