从YAML文件加载ActiveRecord模型

时间:2014-07-10 14:35:16

标签: ruby-on-rails ruby activerecord model yaml


我想创建一个从 YAML 文件填充的ActiveRecord只读模型。 这是我的模特:

class Building  < ActiveRecord::Base

?right_callback_to_use? :load_data_from_yaml
after_initialize :readonly!

def load_data_from_yaml
    #implementation?
end

end

这是我的yml

- id: 1
  name: Building 1
- id: 2
  name: Building 2

如何从外部yml文件加载数据并将其与我的模型相关联?

我应该如何只在我申请的最开始时调用我的函数load_data_from_yaml

我正在使用 Rails 4

谢谢!

2 个答案:

答案 0 :(得分:2)

根据您在问题中添加的YAML结构,以下内容应该有效,假设file.yml是您YAML文件的名称

require 'yaml' #I think rails does this already for you so it might not be necessary

def load_data_from_yaml
  YAML.load_file("file.yml").each { |building| self.class.create!(building) }
end

如果YAML文件的大小很大,而您想要一些速度,可以查看:https://github.com/bjhaid/active_record_bulk_insert

你的方法看起来像这样:

def load_data_from_yaml
  self.class.bulk_insert(YAML.load_file("file.yml"))
end

答案 1 :(得分:1)

我认为您正在搜索ActiveHash。此库充当只读ActiveRecord,允许您将数据定义为散列,YAML或JSON。它甚至支持关系!