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

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

概述有一个表格问题和一个数据文件questions.yml.假设没有“问题”模型. ‘questions.yml’从表中有一些recode转储. ---questions_001: title: ttt1 content: ccc1questions_002: title: ttt2 content: ccc2 我想从yml文件加载数据,将它们插入数据库.但我不能使用rake db 有一个表格问题和一个数据文件questions.yml.假设没有“问题”模型.

‘questions.yml’从表中有一些recode转储.

---questions_001:  Title: ttt1  content: ccc1questions_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??   endend

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

编辑:

我试过了:

Class.new(ActiveRecord::Base).create(record)

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

但没有插入数据库

解决方法 将日期从yml文件加载到记录后尝试此 *** 作:

class Question < ActiveRecord::Base  # Question model just to import the yml fileendrecords.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,klassend

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)  endend

要直接使用连接,您可以使用以下内容:

ActiveRecord::Base.connection.execute("YOUR sql CODE")
总结

以上是内存溢出为你收集整理的ruby-on-rails – 如何将.yml文件中的数据加载到数据库?全部内容,希望文章能够帮你解决ruby-on-rails – 如何将.yml文件中的数据加载到数据库?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1285729.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-09
下一篇 2022-06-09

发表评论

登录后才能评论

评论列表(0条)

保存