0

次の形式のデータを含む 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  
4

2 に答える 2

2

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')

data は基本的に単なる ruby​​ ハッシュであるため、それをトラバースすることで好きなものを表示できます。

編集:

2番目のオプションが必要な場合。次のことを試してください。

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 フォーマットを追加するための違いは非常に単純であり、必要に応じてこれをさらに変更できるはずです。

于 2012-10-11T19:11:44.707 に答える
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"}]
于 2012-10-11T19:07:55.593 に答える