【问题标题】:Load an ActiveRecord models from a YAML file从 YAML 文件加载 ActiveRecord 模型
【发布时间】:2014-08-31 23:52:54
【问题描述】:


我想创建一个从 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

谢谢!

【问题讨论】:

  • 取决于YAML文件的结构,你可以self.class.create(Yaml.load_file("file.yaml"))file.yaml是你的YAML文件的名字
  • @bjhaid 我添加了我的 YAML 文件的基本结构;)

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


【解决方案1】:

使用您添加到问题中的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

【讨论】:

  • 谢谢,很有用。我还有另一个问题:我找不到适合我的模型的回调:我想在真正开始时加载数据,并且只加载一次,所以在没有任何初始化的情况下调用 Building.all。有可能吗?
  • 您可以将所有内容放入db/seed.rb,然后在运行您的应用程序之前运行rake db:seed,这样您就可以加载数据库了
【解决方案2】:

我认为您正在搜索ActiveHash。该库充当只读 ActiveRecord 并允许您将数据定义为哈希、YAML 或 JSON。它甚至支持关系!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-09-27
    • 1970-01-01
    • 1970-01-01
    • 2016-04-06
    • 1970-01-01
    • 2020-09-16
    • 1970-01-01
    相关资源
    最近更新 更多