我有一个YAML数据库,其数据格式如下:
- product:
name: Apples
- product:
name: Grapes
如何更新它以便将每个产品分配到一个类别,然后在我的页面上我可以在一个类别标题下有一个无序列表?
例如:
Fruit
*Apples
*Grapes
Vegetables
*Tomatoes
*Broccoli
我试着搜索这样的例子,却找不到任何东西。有可能做这样的事吗?
- category:
name: fruit
- product:
name: Apples
- product:
name: Grapes
- category:
name: vegetables
- product:
name: Tomatoes
- product:
name: Broccoli
答案 0 :(得分:2)
我建议两种方案,第一种将所有产品组合在一起:
products:
- name: Apple
type: Fruit
- name: Grape
type: Fruit
- name: Tomato
type: Vegetable
- name: Brocoli
type: Vegetable
另一种方案将针对每种类型的产品使用组
fruits:
- name: Apple
- name: Grape
vegetable:
- name: Tomato
- name: Brocoli
要实际显示这个,你只需加载yaml数据就像(如果这已经改变,请原谅我......自从我使用yaml以来已经有一段时间了):
require 'yaml'
data = YAML.load_file('data.yml')
数据本质上只是一个红宝石哈希,因此您可以通过遍历它来显示您喜欢的任何内容。
编辑:
如果第二个选项是您想要的。请尝试以下方法:
require 'yaml'
data = YAML.load_file('data.yml')
data.each do |category, products|
puts "#{category}"
products.each do |product|
puts "\t#{products}"
end
end
输出应为:
fruits
Apple
Grape
vegetable
Tomato
Brocoli
如果要输出html,请将其修改为:
require 'yaml'
data = YAML.load_file('data.yml')
data.each do |category, products|
puts "#{category}"
puts "<ul>"
products.each do |product|
puts "<li>#{products}</li>"
end
puts "</ul>"
end
您可以看到添加html格式的差异非常简单,您应该能够根据需要进一步修改它。
答案 1 :(得分:0)
您只需为每个category
分配Product
属性:
- name: Apples
category: Fruit
- name: Grapes
category: Fruit
- name: Tomatoes
category: Vegetables
- name: Broccoli
category: Vegetables
...然后加载所有Fruit
的数据:
require "yaml"
YAML.load("products.yml").select{ |product| product["category"] == "Fruit" }
# => [{"name"=>"Apples", "category"=>"Fruit"}, {"name"=>"Grapes", "category"=>"Fruit"}]