有没有办法将ActiveRecord对象导出到seeds.rb?

时间:2010-12-18 08:33:00

标签: ruby-on-rails activerecord

是否可以从数据库导出数据,或运行类似Person.find(1).to_seed的内容并将控制台的输出复制到seeds.rb文件中?

5 个答案:

答案 0 :(得分:5)

这里有一颗宝石 - https://github.com/rroblak/seed_dump - 就是这样。

答案 1 :(得分:3)

尝试使用seed-fu。您可以为SeedFu::Writer提供一个CSV文件,该文件将用于生成seeds.rb“format”中的文件。当然,使用某些数据库工具,您需要将数据库表导出为CSV文件。

答案 2 :(得分:1)

不,不是真的。但是你可以编写可以做到这一点的代码!

策略是在YAML中转储数据库条目并在seed.rb中读取该YAML。 另一种策略是编写生成seed.rb的代码。

似乎是一种非常典型的需求。我没有遇到过宝石或其他已经做过的东西。

答案 3 :(得分:1)

我发现解决这个问题的一小段代码是来自Jesse Newland的rake任务:

http://snippets.dzone.com/posts/show/3393

namespace :db do
  namespace :fixtures do
    desc 'Create YAML test fixtures from data in an existing database. Defaults to development database. Set RAILS_ENV to override.'
    task :dump => :environment do
      sql  = "SELECT * FROM %s"
      skip_tables = ["schema_info"]
      ActiveRecord::Base.establish_connection(:development)
      (ActiveRecord::Base.connection.tables - skip_tables).each do |table_name|
        i = "000"
        File.open("test/fixtures/#{table_name}.yml", 'w') do |file|
          data = ActiveRecord::Base.connection.select_all(sql % table_name)
          file.write data.inject({}) { |hash, record|
            hash["#{table_name}_#{i.succ!}"] = record
            hash
          }.to_yaml
        end
      end
    end
  end
end

在YAML中获取导出的灯具后,您可以运行一些正则表达式,以便为种子文件正确格式化它们。这可能是一个很好的代码片段,可用作构建导出种子文件的rake任务的基础。

答案 4 :(得分:0)

打开Rails控制台并使用此技巧:

puts name_of_your_.attributes.to_yaml