从数据库中已有的数据创建种子文件

时间:2010-12-08 23:05:59

标签: ruby-on-rails activerecord ruby-on-rails-3 rake

我正在使用Rails 3.0.3并且已经在数据库中拥有我的“类别”表的数据,但是想要从中创建种子文件。是否有任何rake任务将从此表中为我生成seeds.rb格式?

4 个答案:

答案 0 :(得分:63)

有一个名为seed_dump的宝石,它可以完全按照你想要的那样做:

答案 1 :(得分:29)

不确定任何现有的rake任务,但你可以尝试在rails console&amp ;;中运行这样的东西。将结果粘贴到seeds.rb文件

警告:脏和未经测试)

c = Category.all

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

调整您可能拥有的任何其他字段。

希望这有帮助。

答案 2 :(得分:7)

我已经使用YamlDb从我的开发数据库转储数据,然后将其加载到另一台服务器。它将数据转储到Yaml文件,该文件将在您希望使用db:load将其推送到任何其他数据库服务器时使用。

https://github.com/ludicast/yaml_db

答案 3 :(得分:4)

老问题,我有一个新的基于@Brian的答案。

如果你想按原样保留整行:

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"

或者,如果您希望除了某些属性之外的所有属性,例如timestamps:

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