ruby-on-rails – 如何将.yml文件中的数据加载到数据库?
发布时间:2020-12-17 02:51:10 所属栏目:百科 来源:网络整理
导读:有一个表格问题和一个数据文件questions.yml.假设没有“问题”模型. ‘questions.yml’从表中有一些recode转储. ---questions_001: title: ttt1 content: ccc1questions_002: title: ttt2 content: ccc2 我想从yml文件加载数据,将它们插入数据库.但我不能使
有一个表格问题和一个数据文件questions.yml.假设没有“问题”模型.
‘questions.yml’从表中有一些recode转储. --- 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文件加载到记录后尝试此操作:
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") (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |