Создать начальный файл из данных уже в базе данных - PullRequest
50 голосов
/ 09 декабря 2010

Я использую Rails 3.0.3 и у меня уже есть данные для моей таблицы "категорий" в базе данных, но я хочу создать из нее начальный файл Есть ли какие-нибудь грабли, которые сгенерируют для меня формат seed.rb из этой таблицы?

Ответы [ 4 ]

63 голосов
/ 06 июля 2012

Существует гем под названием seed_dump, который будет делать именно то, что вы хотите:

29 голосов
/ 09 декабря 2010

Не уверен ни в каких существующих задачах с граблями, но вы можете попробовать выполнить что-то подобное в консоли rails и вставить результаты в ваш файл seed.rb

( предупреждение: грязный и непроверенный)

c = Category.all

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

Настройте любые дополнительные поля, которые вы можете иметь.

Надеюсь, это поможет.

7 голосов
/ 09 декабря 2010

Я использовал YamlDb для выгрузки данных из моей базы разработки, а затем загружал их на другой сервер.Он выводит данные в файл Yaml, который будет использоваться в любое время, когда вы захотите использовать db: load, чтобы отправить его на любой другой сервер БД.

https://github.com/ludicast/yaml_db

5 голосов
/ 29 июня 2017

Старый вопрос, у меня новый, основанный на ответе @ Брайана.

Если вы хотите сохранить всю строку как есть:

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

c = Category.all

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

seedfile.close

Если вы хотите записать только некоторые атрибуты, измените строку записи на следующую:

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

Или, если вы хотите, чтобы все атрибуты, кроме некоторых, например, отметки времени:

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