Create seed file from data already in the database

Ruby on-RailsActiverecordRuby on-Rails-3Rake

Ruby on-Rails Problem Overview


I'm using Rails 3.0.3 and have data for my "categories" table already in the database, but want to create a seed file from it. Is there any rake task that will generate the seeds.rb format for me from this table?

Ruby on-Rails Solutions


Solution 1 - Ruby on-Rails

There is a gem called seed_dump, which will do exactly what you want:

Solution 2 - Ruby on-Rails

Not sure about any existing rake tasks, but you can try running something like this in the rails console & paste the results into your seeds.rb file

(warning: dirty & untested)

c = Category.all

c.each do |cat|
  puts "Category.create(:name => '#{cat.name}')"
end

Adjust for any additional fields you may have.

Hope this helps.

Solution 3 - Ruby on-Rails

Old question, I have a new one based on @Brian's answer.

If you want to keep the entire row as is:

seedfile = File.open('db/seeds.rb', 'a')

c = Category.all

c.each do |cat|
  seedfile.write "Category.create(#{cat.attributes})\n"
end

seedfile.close

If you want to only write some attributes, change the write line to the following:

seedfile.write "Category.create(#{cat.attributes.slice('attr1', 'attr2', ...})\n"

Or, if you wish all the attributes except some, for example timestamps:

seedfile.write "Category.create(#{cat.attributes.except('created_at', 'updated_at')})\n"

Solution 4 - Ruby on-Rails

I've used YamlDb to dump data from my development db and then load it up to another server. It dumps the data to a Yaml file, which will be used any time you want to use db:load to push it up to any other db server.

https://github.com/ludicast/yaml_db

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionswrobelView Question on Stackoverflow
Solution 1 - Ruby on-RailsJohn PetersonView Answer on Stackoverflow
Solution 2 - Ruby on-RailsBrianView Answer on Stackoverflow
Solution 3 - Ruby on-RailsRuby RacerView Answer on Stackoverflow
Solution 4 - Ruby on-RailsMattSlayView Answer on Stackoverflow