我想创建一个从 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 。
谢谢!
答案 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。它甚至支持关系!