簡體   English   中英

Ruby on Rails:從 YAML 文件加載種子數據

[英]Ruby on Rails: loading seed data from a YAML file

如何使用 YAML 文件而不是 seed.rb 將初始數據加載到數據庫中?

db/seeds.rb添加代碼來解析 YAML 文件,例如:

seed_file = Rails.root.join('db', 'seeds', 'categories.yml')
config = YAML::load_file(seed_file)
Category.create!(config)

然后,只需將 YAML 文件放在db/seeds/categories.yml YAML 文件應該是關聯數組的列表,例如:

- name: accessory
  shortcode: A

- name: laptop
  shortcode: L

- name: server
  shortcode: S

我使用了@Zaz 回答的答案。 它運作良好。

但與此同時,如果您的種子數據出現問題(例如您有一個非常大的種子 yaml 文件),您想知道您的 yaml 的哪一部分出了問題。 到時候你可以在創建后添加一個塊! 對於這樣的調試:

seed_file = Rails.root.join('db', 'seeds', 'categories.yml')
config = YAML::load_file(seed_file)
counter = 0
Category.create!(config) do |c|
  puts "Create category #{counter += 1} with name: #{c.name}"
end

查看 Ruby on Rails 固定裝置指南:

http://guides.rubyonrails.org/testing.html#the-low-down-on-fixtures

通常,您可以在test/目錄中創建 YAML 夾具文件,然后使用rake db:fixtures:load命令將它們加載到您的數據庫中。 關於你可以用夾具做的所有很酷的事情的完整文檔在這里:

http://api.rubyonrails.org/classes/Fixtures.html

我構建了這個腳本來處理這個問題,同時將種子 yaml 文件與測試分開。

它有命名空間支持,當你只提供一個 id 時會自動查找記錄

https://gist.github.com/x9sim9/78405f13b698b87ab7b234ea793399ca

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM