gpt4 book ai didi

ruby-on-rails - 如何将 .yml 文件中的数据加载到数据库?

转载 作者:行者123 更新时间:2023-12-04 23:32:24 24 4
gpt4 key购买 nike

有一张 table questions , 和一个数据文件 questions.yml .假设没有“问题”模型。

'questions.yml' 有一些从表中转储的重新编码。

---
questions_001:
title: ttt1
content: ccc1
questions_002:
title: ttt2
content: ccc2

我想从 yml 文件加载数据,将它们插入到数据库中。但是我不能用 rake db:fixtures:load ,因为它将内容视为'erb'模板,这不是我想要的

所以我想写另一个 rake 任务,手动加载数据。

我可以通过以下方式阅读记录:
File.open("#{RAILS_ROOT}/db/fixtures/#{table_name}.yml", 'r') do |file|
YAML::load(file).each do |record|
# how to insert the record??
end
end

但我不知道如何插入它们。

编辑:

我试过了:
Class.new(ActiveRecord::Base).create(record)


class Dummy < ActiveRecord::Base {}
Dummy.create(rcord)

但没有插入数据库

最佳答案

将日期从 yml 文件加载到 records 后尝试此操作:

class Question < ActiveRecord::Base
# Question model just to import the yml file
end
records.each { |record| Question.create(record) }

您可以简单地创建一个仅用于导入的模型。您不需要创建 app/models/question.rb .只需在负责导入的脚本中编写上面的代码。

更新:

您可以使用以下功能:
def create_class(class_name, superclass, &block)
klass = Class.new superclass, &block
Object.const_set class_name, klass
end

source
File.open("#{RAILS_ROOT}/db/fixtures/#{table_name}.yml", 'r') do |file|
YAML::load(file).each do |record|
model_name = table_name.singularize.camelize
create_class(model_name, ActiveRecod::Base) do
set_table_name table_name.to_sym
end
Kernel.const_get(model_name).create(record)
end
end

要直接使用连接,您可以使用以下命令:
ActiveRecord::Base.connection.execute("YOUR SQL CODE")

关于ruby-on-rails - 如何将 .yml 文件中的数据加载到数据库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3082643/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com