使用方法调用从YAML文件创建对象

时间:2016-01-25 17:56:50

标签: ruby-on-rails ruby

我想将一些对象保存到YAML文件中,然后在需要时加载它们并从中创建一些模型对象。这很容易和直接,因为加载文件并循环对象并在旅途中创建它们。

但我的问题是我需要一些实际上是方法调用的字段。例如:

  users:
      -   name: sam
          email: sam@example.com
          status: status_label(1)
          comment: first_occurrence.comment   

      -   name: jane
          email: jane@example.com
          status: status_label(2)
          comment: first_occurrence.comment    

这些方法是类的方法我将加载YAML文件并开始创建用户对象。

在应用程序模型中:

data = YAML.load_file 'data.ml'
data['users'].each do |key, values|
  User.create values
end
不会评估方法的

会将它们保存为值,如何解决?

1 个答案:

答案 0 :(得分:3)

更改YAML结构,以便区分值和方法调用。这样的事情会做:

users:
-   attributes:
        name: sam
        email: sam@example.com
    properties:
        status: status_label(1)
        comment: first_occurrence.comment   

在课堂上使用:

data = YAML.load_file 'data.ml'
data['users'].each do |key, values|
  u = User.new values['attributes']
  values['properties'].each do |key, property|
    u[key] = instance_eval(property)
    u.save
  end
end