在搜索解决方案时,我在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
所以现在,我希望将键(例如,类型和价格)放在表头中,并且每个产品的值都是。但是我也希望拥有“静态”列,这些列不是从哈希生成的,比如产品名称。这是一张图片:
答案 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-guy的示例向您展示了您的Product模型的这种固定形式对于索引操作的样子。
另请参阅:http://guides.rubyonrails.org/layouts_and_rendering.html
和:http://guides.rubyonrails.org/(在视图下)