问题
How do I use a YAML file instead of seeds.rb to load the initial data into a database?
回答1:
Check out the Ruby on Rails Guide to fixtures:
http://guides.rubyonrails.org/testing.html#the-low-down-on-fixtures
Generally, you can create YAML fixture files in the test/ directory and then load them into your database using the rake db:fixtures:load command. The full documentation on all the cool things you can do with fixtures is here:
http://api.rubyonrails.org/classes/Fixtures.html
回答2:
Add code in db/seeds.rb to parse the YAML file, e.g.:
seed_file = Rails.root.join('db', 'seeds', 'categories.yml')
config = YAML::load_file(seed_file)
Category.create!(config)
Then, simply place the YAML fie in db/seeds/categories.yml. The YAML file should be a list of associative arrays, e.g.:
- name: accessory
shortcode: A
- name: laptop
shortcode: L
- name: server
shortcode: S
回答3:
I used the answer @Zaz answered. It works very well.
But in the meanwhile if something went wrong with your seed data(For example you have a very large seed yaml file), you would like to know which part of your yaml went wrong. At that time you can add a block after create! for debug like this:
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
回答4:
I built this script to handle exactly this issue, while keeping seeds yaml files separate to tests.
It has namespace support, and will automatically find records when you supply just an id
https://gist.github.com/x9sim9/78405f13b698b87ab7b234ea793399ca
来源:https://stackoverflow.com/questions/6986463/ruby-on-rails-loading-seed-data-from-a-yaml-file