web-dev-qa-db-fra.com

Créer un fichier de départ à partir de données déjà présentes dans la base de données

J'utilise Rails 3.0.3 et j'ai déjà des données pour ma table "categories" dans la base de données, mais je veux en créer un fichier de départ. Y a-t-il une tâche de rake qui générera le format seeds.rb pour moi de ce tableau?

50
swrobel

Il y a un joyau appelé seed_dump, qui fera exactement ce que vous voulez:

63
John Peterson

Vous n'êtes pas sûr des tâches de râteau existantes, mais vous pouvez essayer d'exécuter quelque chose comme ça dans la console Rails et coller les résultats dans votre fichier seeds.rb

(avertissement: sale et non testé)

c = Category.all

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

Ajustez pour tous les champs supplémentaires que vous pourriez avoir.

J'espère que cela t'aides.

29
Brian

J'ai utilisé YamlDb pour vider les données de ma base de développement, puis les charger sur un autre serveur. Il sauvegarde les données dans un fichier Yaml, qui sera utilisé chaque fois que vous souhaitez utiliser db: load pour le pousser vers n'importe quel autre serveur db.

https://github.com/ludicast/yaml_db

7
MattSlay

Vieille question, j'en ai une nouvelle basée sur la réponse de @ Brian.

Si vous souhaitez conserver la ligne entière telle quelle:

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

c = Category.all

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

seedfile.close

Si vous souhaitez uniquement écrire certains attributs, modifiez la ligne d'écriture comme suit:

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

Ou, si vous souhaitez tous les attributs sauf certains, par exemple les horodatages:

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