哈希制成表格

时间:2013-10-11 04:41:33

标签: ruby-on-rails ruby hash

在搜索解决方案时,我在StackOverflow上找到了这个:Generate an HTML table from an array of hashes in Ruby

这很好用,但我是一个新的程序员,无法使用rails。我有一个名为products的数据库表。每个产品都有一个名为data的字段,用于存储哈希值。这个哈希看起来像:

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

我正在使用haml,我的视图现在看起来像:(这只是打印出哈希):

- @products.each do |product|
  =product.name   
  =product.data #THIS PRINTS A HASH LIKE THE ONE ABOVE
  %hr

所以现在,我希望将键(例如,类型和价格)放在表头中,并且每个产品的值都是。但是我也希望拥有“静态”列,这些列不是从哈希生成的,比如产品名称。这是一张图片:

enter image description here

2 个答案:

答案 0 :(得分:1)

您可以像这样简单地获取您的值:

%table
  %thead
    %tr
      %th
        Name
      %th
        Type
      %th
        Price
  %tbody        
    - @products.each do |product|
      %tr        
        %td
          = product.name 
        %td  
          = product.data["type"]  unless product.data.nil?
        %td
          = product.data["price"] unless product.data.nil?

答案 1 :(得分:1)

如果您从数据库以外的其他来源读取数据,那么您引用的StackOverflow文章效果很好,例如:从YAML或CSV文件,然后将其格式化为HTML。

本文中该方法的优点在于它在Hash中使用的密钥是灵活的,例如,你有一个灵活的“架构”。根据您的输入数据,格式化的HTML表可以包含不同的列。

另一方面,在Rails应用程序中,您通常拥有一个具有固定架构的底层数据库,例如:属性(键)事先是众所周知的,并且在迁移中定义并在模型中引用。由于属性是固定的,因此HTML或HAML表单是固定的,而不是像第一种情况那样可变,并且表单只能作为模板文件提供。

这就是为什么你在app/views/your-model-name/

下的Rails中拥有视图的原因

来自@ rails-guy的示例向您展示了您的Product模型的这种固定形式对于索引操作的样子。

另请参阅:http://guides.rubyonrails.org/layouts_and_rendering.html

和:http://guides.rubyonrails.org/(在视图下)