如何使用YAML文件,而不是seeds.rb初始數據加載到數據庫中裝載種子數據?Ruby on Rails的:從YAML文件
回答
退房的Ruby on Rails的指南夾具:
http://guides.rubyonrails.org/testing.html#the-low-down-on-fixtures
一般情況下,你可以創建在test/
目錄YAML夾具文件,然後使用rake db:fixtures:load
命令將它們加載到數據庫中。在所有很酷的東西,你可以用燈具做完整的文檔是在這裏:
添加代碼db/seeds.rb
來解析YAML文件,如:
seed_file = Rails.root.join('db', 'seeds', 'categories.yml')
config = YAML::load_file(seed_file)
Category.create!(config)
然後,只需將YAML fie在db/seeds/categories.yml
。 YAML文件應該是關聯數組列表,例如:
- name: accessory
shortcode: A
- name: laptop
shortcode: L
- name: server
shortcode: S
這種解決方案的問題是,如果你運行'耙分貝:seed'第二時間,你會得到一堆重複。根據唯一性的要求,您可能想要修改最後一行,如下所示:'config.each {| values | Category.first_or_create(值)}' – sberkley
在你想播種兩次數據庫什麼情況呢? 'rake db:reset'可以完成99%的時間。 – Zaz
如果您向表中添加種子值或添加帶有種子值的新表格。丟棄整個數據庫可能是開發環境中的解決方案,但肯定不是在生產環境中。如果在另一個表中有任何對該表ID的引用,則在重新播種之前刪除播種表也不是一種選擇。如果您需要刪除以前播種的值,情況會變得更加複雜,並且可能需要超出'rake db:seed'的解決方案。 – sberkley
我用@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
- 1. 建立從YAML博客或FAQ部分文件只有在Ruby on Rails的?
- 2. Ruby on Rails的合併兩個YAML文件在一個獨特的YML文件
- 3. Ruby on Rails:從IRB運行.rb文件
- 4. ruby on rails:.project文件
- 5. Ruby on Rails - Javascript文件夾
- 6. Ruby on rails文件上傳
- 7. SQL文件和Ruby on Rails
- 8. Ruby on rails .erb文件
- 9. Ruby on rails文件設置
- 10. 的Rails + YAML:從application.yml
- 11. Ruby on Rails的:從對象
- 12. Ruby on Rails的:從foo.bars
- 13. Ruby on Rails的哈希從
- 14. Ruby on Rails的 - 呼叫從
- 15. Ruby on Rails的 - 從PARAMS
- 16. Ruby on Rails的:從陣列
- 17. Ruby on Rails的:從一類
- 18. Ruby on Rails的 - Rake文件validates_uniqueness_of
- 19. Ruby on Rails教程完整的文件
- 20. Ruby on Rails的docsplit文件路徑
- 21. Ruby on Rails Carrierwave - 上傳'nobody'的文件
- 22. Ruby on Rails中的文件存儲庫
- 23. Ruby on Rails的 - 渲染.js.erb文件
- 24. Ruby on Rails的 - 不下載文件
- 25. Ruby on Rails的AJAX文件上傳
- 26. Ruby on Rails前端的音頻文件
- 27. Ruby on Rails的:「找不到文件‘selectize’」
- 28. Ruby on Rails的 - Carrierwave不保存文件
- 29. Ruby on Rails的 - 導入CSV文件
- 30. YAML文件中的Rails語法錯誤?
看到作爲公認的答案不是很大(放入'測試/'目錄種子數據)和[我的回答](http://stackoverflow.com/a/24957205/405550 )有更多upvotes,請你考慮接受我的? – Zaz