1

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

这很好用,但我是一个新程序员,不能让它与 rails 一起工作。我有一个名为 products 的数据库表。每个产品都有一个称为数据的字段,用于存储哈希。这个哈希看起来像:

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

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

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

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

在此处输入图像描述

4

2 回答 2

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?
于 2013-10-11T05:23:18.960 回答
1

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

文章中方法的优点是它在哈希中使用什么键是灵活的,例如你有一个灵活的“模式”。根据您的输入数据,格式化的 HTML 表格可以包含不同的列。

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

这就是为什么您在 Rails 中拥有视图的原因app/views/your-model-name/

@rails-guy 中的示例向您展示了 Product 模型的这种固定形式对于 index 操作的外观。

另见: http: //guides.rubyonrails.org/layouts_and_rendering.html

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

于 2013-10-11T05:51:02.763 回答