【问题标题】:Storing and retrieving static data in rails在 Rails 中存储和检索静态数据
【发布时间】:2014-06-13 08:52:09
【问题描述】:

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

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

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

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

  1. 所有记录都保存在 .json 或 .yml 文件中
  2. 每条记录都保存在单独的 .yml 或 .markdown 文件中,位于特定文件夹中(如 jekyll)。

示例:词汇表

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

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

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

关键问题

  1. 如何将模型指向静态数据文件,而不是数据库?
  2. 源目录应该在哪里?
  3. 最好的存储格式是什么?

非常感谢您的帮助!

【问题讨论】:

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


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

      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 了解更多信息。由于您希望用户更改文件,因此我会选择您认为对用户最友好的文件。

      【讨论】:

      • 似乎,如果我们关心性能,那么这种方式会被 IO 进程占用太多资源
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-09-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多