Создать начальный файл из данных уже в базе данных
Я использую 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, чтобы отправить его на любой другой сервер БД.