Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/60.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 将哈希值制成表_Ruby On Rails_Ruby_Hash - Fatal编程技术网

Ruby on rails 将哈希值制成表

Ruby on rails 将哈希值制成表,ruby-on-rails,ruby,hash,Ruby On Rails,Ruby,Hash,在搜索解决方案时,我在StackOverflow上找到了以下内容: 这很好,但是我是一个新的程序员,不能让它与rails一起工作。我有一个名为products的数据库表。每个产品都有一个名为data的字段,用于存储散列。此哈希看起来像: {"type"=>"book", "price"=>"7.99"} 我正在使用haml,我现在的视图如下:(这只是打印散列): 现在,我想让关键字(例如,type和price)在表头中作为,每个产品的值都是。但我也希望有“静态”列,它们不是从散列中

在搜索解决方案时,我在StackOverflow上找到了以下内容:

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

{"type"=>"book", "price"=>"7.99"}
我正在使用haml,我现在的视图如下:(这只是打印散列):

现在,我想让关键字(例如,type和price)在表头中作为,每个产品的值都是。但我也希望有“静态”列,它们不是从散列中生成的,比如产品名称。这是一张照片:


您可以简单地获得如下值:

%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?

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

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

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

这就是为什么Rails中的视图位于
app/views/your model name/

@rails-guy的示例向您展示了对于索引操作,产品模型的这种固定形式是什么样子

另见:

及:(在意见范围内)

%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?