从Rails中的DB重新生成YAML夹具

时间:2015-08-20 20:40:24

标签: ruby-on-rails ruby yaml fixture

我正在使用Rails,我的YAML灯具已损坏且无法使用。我想基于开发数据库重新生成YAML灯具。

尝试获取所有数据库数据并将其转换为固定装置。我想要的是重新创建最初在模型创建时创建的标准灯具。

在Rails 4中有一种简单的方法吗?

(我看到this页面讨论了如何通过创建rake任务来解决这个问题。但是Q是从3年前开始的,我想知道是否还创建了一个更直接的方法。)

2 个答案:

答案 0 :(得分:7)

没有标准或非常优雅的方式。

我需要时使用此代码段:

pip

答案 1 :(得分:0)

我为此写了rake任务。

https://gist.github.com/kuboon/55d4d8e862362d30456e7aa7cd6c9cf5

# lib/tasks/db_fixtures_export.rake
namespace 'db:fixtures' do
  desc "generate fixtures from the current database"

  task :export => :environment do
    Rails.application.eager_load!
    models = defined?(AppicationRecord) ? ApplicationRecord.decendants : ActiveRecord::Base.descendants
    models.each do |model|
      puts "exporting: #{model}"

      # Hoge::Fuga -> test/fixtures/hoge/fuga.yml
      filepath = Rails.root.join('test/fixtures', "#{model.name.underscore}.yml")
      FileUtils.mkdir_p filepath.dirname

      filepath.open('w') do |file|
        hash = {}
        model.find_each do |r|
          key = r.try(:name) || "#{filepath.basename('.*')}_#{r.id}"
          hash[key] = r.attributes.except(:password_digest)
        end
        file.write hash.to_yaml
      end
    end
  end
end