在rails中存储和检索静态数据

时间:2014-04-27 23:46:18

标签: ruby-on-rails ruby-on-rails-3 static yaml

在Ruby on Rails 3.2.12项目中,我想在静态文件中存储模型的数据。

我不需要能够通过应用程序写入数据,并希望通过更改静态文件来处理更新和添加新对象。

有没有办法设置模型,然后说“查看此文件(或文件夹)查找记录”,而不是数据库(该应用程序还有数据库)?

我可以想象数据以两种主要方式存储:

  1. 所有记录都保存在.json或.yml文件中
  2. 每条记录都保存在特定文件夹内的个人.yml或.markdown文件中(如jekyll所示)。
  3. 示例:词汇表

    我的应用程序有一个词汇表。词汇表中的每个条目都应该是一个单独的记录。

    将会有一个词汇表索引页面(/词汇表),就像您的standard glossary一样,列出了所有术语和定义。每个单独的记录(术语+定义)也需要单独检索,以便在其他页面的脚注中使用。

    我希望人们能够通过github编辑文件来编辑词汇表。它们可以指向包含所有记录的单个文件,或者(最好)只包含他们想要编辑的记录的单个文件(处理的语法更少,风险更小)。

    关键问题

    1. 如何将模型指向静态数据文件而不是数据库?
    2. 源目录应该在哪里?
    3. 什么是最好的存储格式?
    4. 非常感谢你的帮助!

2 个答案:

答案 0 :(得分:2)

ActiveHash将是一个很好的解决方案。如果您希望将数据存储在单独的yaml文件中而不是直接存储在模型中,则可以使用ActiveYaml配置。

答案 1 :(得分:1)

除非有人提出更好的解决方案,或者使用可以开箱即用的宝石,我建议使用自己的查找和保存方法构建自己的模型。像(未经测试)的东西:

class Term
  attr_accessor :name, :definition

  def self.find(name)
    YAML.load(File.read("#{name}.yaml"))
  end

  def save
    File.open("#{name}.yaml", 'w'){ |f| f.write(YAML.dump(self)) }
  end
end

保存格式由您决定,有关详细信息,请参阅herehere。由于您希望用户更改文件,因此您会找到最适合用户使用的文件。