在Ruby on Rails中,如何处理必须保留在数据库中但不是正确模型的数据?
想象一下用Ruby on Rails编写的Web应用程序。该应用程序的部分状态用一条不适合模型描述的数据表示。该状态描述符需要与模型保存在同一数据库中。
它与模型的不同之处在于,该类仅需要一个实例,并且与其他类没有关系。
有没有人遇到过这样的事情?
解决方案
如果是数据,并且在数据库中,则它是模型的一部分。
这并不是真正的RoR问题;这是一个普通的面向对象设计问题。
如果是我,我可能会找到一种将数据概念化为模型的方法,然后通过工厂方法和私有构造函数使其成为单例。
或者,我们可以将其视为日志记录的一种形式。在这种情况下,我们只有一个Logger类(也是一个单例),该类直接读取/写入数据库,并在每个请求的开始和结束时调用。
在Rails中,如果数据在数据库中,则它在模型中。在这种情况下,该模型可能被称为"配置",但是它仍然映射到Rails系统中的ActiveRecord类。
如果此数据确实是静态的,则可能根本不需要数据库。
我们可以在应用程序控制器中使用(作为示例)变量:
class ApplicationController < ActionController::Base helper :all @data = "YOUR DATA HERE" end
有多种方法可用于实例化数据以供在Rails应用程序中使用。
我不确定我是否理解我们为什么说它不适合Rails模型。
如果这只是一个复杂的数据结构,只需在数据库的文本字段中保存一堆Ruby代码即可:-)
例如,如果我们要保存复杂的嵌套哈希,请将以下内容分配给"数据"文本字段:
ComplexThing.data = complex_hash.inspect
当我们想读回它时,只需
complex_hash = eval ComplexThing.data
让我指出有关此解决方案的两件事:
- 如果数据结构不是标准的Ruby类,则简单的检查可能不会这样做。如果在任何地方都看到#<MyClass:0x4066e3c>,则表示未正确序列化某些内容。
- 这是一个幼稚的实现。如果我们冒着拥有unicode数据的风险,或者我们确实在节省大量定制类,则可能需要查看真正的编组解决方案。
根据描述,我认为rails-settings插件应该可以满足需求。
从自述文件:
" Settings是一个易于管理全局键,值对表的插件。可以将其视为存储在数据库中的全局Hash,它使用类似ActiveRecord之类的简单方法进行操作。请跟踪任何我们不想使用的全局设置硬代码插入Rails应用程序。我们可以存储任何类型的对象。字符串,数字,数组或者任何对象。"
http://github.com/Squeegy/rails-settings/tree/master