是否有任何gem可以从yml文件转储数据?

时间:2010-06-21 08:51:40

标签: ruby-on-rails ruby yaml

我整整都找到这样的宝石,但找不到好宝石。我想写一个,但我无法做到。

我的数据库中的数据可能是英文文本,将以纯文本形式转储到yml文件。有些是非英文文本,将是二进制类型。

他们俩都有这样的代码:

<% xxx %>

当我使用rake db:fixtures:load将它们加载到数据库中时,可能会出现错误:method xxx not found

我不想找到一个好的宝石可以解决这个问题。感谢您的帮助


更新

我放弃了寻找这样的宝石。起初,我认为这是一项简单的任务,但现在,经过一些研究,我不得不说,它比我预期的要困难得多。

2 个答案:

答案 0 :(得分:1)

呃...我不确定你是否真的需要宝石呢? Rails本身可以将任何模型转换为YAML。

假设您有一个名为“Objects”的模型。你可以点击一条看似如下的路线:

/objects.yaml

你会得到一个YAML形式的所有对象的巨大文本文件。

当然,你希望有类似的东西:

respond_to do |format|
  format.yaml {render  :yaml => @objects}
end

在你安静的控制器中。

如果您不想尝试执行此操作,则可以随时执行

@yaml = []
@objects.each do |object|
@yaml.push object.to_yaml
end

ruby​​中的任何位置,它将为您提供一系列yaml对象,然后您可以随意写入文件。

我想如果rails本身正在生成yaml,那么它以后能够将它作为一个夹具加载吗?

答案 1 :(得分:1)

你遇到问题的原因是因为Fixture加载器会在加载数据之前通过erb传递你的夹具。这意味着,如果您有&lt;%xxx%&gt;在您的yaml文件中,然后Rails会将其视为erb并尝试运行名为xxx的方法。

似乎没有一种简单的方法可以关闭灯具的erb处理。我尝试用CSV灯具替换灯具,这仍然可以进行ERB预处理。

如果没有一个简单的答案,我不得不问你的问题为什么你的文件中有这些字符串?

你想让它们被erb扩展吗?