小智 26
问题是陈旧的,但仍然看似相关:是的,有一种简单的方法可以从开发数据库创建灯具:
class ActiveRecord::Base
def dump_fixture
fixture_file = "#{Rails.root}/test/fixtures/#{self.class.table_name}.yml"
File.open(fixture_file, "a+") do |f|
f.puts({ "#{self.class.table_name.singularize}_#{id}" => attributes }.
to_yaml.sub!(/---\s?/, "\n"))
end
end
end
Run Code Online (Sandbox Code Playgroud)
将它放在一个文件中config/initializers- 现在你可以在你的Rails控制台中转储任何ActiveRecord对象,它将自动附加在它各自的fixture文件的末尾:
User.first.dump_fixture追加夹具数据test/fixtures/users.yml.
如果您要创建要在其下运行的脚本,rails runner可以使用以下方法:
File.open("#{Rails.root}/spec/fixtures/documents.yml", 'w') do |file|
file.write Document.all.to_a.map(&:attributes).to_yaml
end
Run Code Online (Sandbox Code Playgroud)
您可以根据需要创建任意数量的块,或者如果您想访问完整的数据库,您可以尝试:
models = defined?(AppicationRecord) ? ApplicationRecord.decendants : ActiveRecord::Base.descendants
models.each do |model|
model_name = model.name.pluralize.underscore
File.open("#{Rails.root}/spec/fixtures/#{model_name}.yml", 'w') do |file|
file.write model.all.to_a.map(&:attributes).to_yaml
end
end
Run Code Online (Sandbox Code Playgroud)
如果您不需要时间戳,可以将代码更改为:
model.all.to_a.map { |m| m.attributes.except('created_at', 'updated_at')}.to_yaml
| 归档时间: |
|
| 查看次数: |
7180 次 |
| 最近记录: |