Создать начальный файл из данных уже в базе данных

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

4 ответа

Решение

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

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

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

c = Category.all

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

Отрегулируйте любые дополнительные поля, которые вы можете иметь.

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

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

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

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"

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

https://github.com/ludicast/yaml_db

Другие вопросы по тегам